From 2790f31141f9f55c2813ccec386cf48099dc25e0 Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Mon, 22 Apr 2024 15:39:10 +0200 Subject: [PATCH] Lecture 3 --- SoSe24/algodat/foundation.py | 6 + SoSe24/lec03_sort_alg/quick_plot.py | 4 +- SoSe24/lec03_sort_alg/quick_sort.py | 31 +- seq3_sorted.txt | 1000 +++++++++++++++++++++++++++ 4 files changed, 1038 insertions(+), 3 deletions(-) create mode 100644 seq3_sorted.txt diff --git a/SoSe24/algodat/foundation.py b/SoSe24/algodat/foundation.py index 48806ca..98a748c 100644 --- a/SoSe24/algodat/foundation.py +++ b/SoSe24/algodat/foundation.py @@ -329,6 +329,12 @@ def read_int_sequence(filename: str) -> AlgoDatArray: a[i].value = l[i] return a +def write_int_sequence(z: AlgoDatArray, filename: str): + with open(filename, "w") as file: + for i in range(len(z)): + file.write(str(z[i].value)+ '\n') + + def read_int_sequence_limited(filename: str, limit: int) -> AlgoDatArray: """Reads a sequence of integers from a file and returns an AlgoDatArray object.""" with open(filename, "r") as file: diff --git a/SoSe24/lec03_sort_alg/quick_plot.py b/SoSe24/lec03_sort_alg/quick_plot.py index 09cf239..c4f3cff 100644 --- a/SoSe24/lec03_sort_alg/quick_plot.py +++ b/SoSe24/lec03_sort_alg/quick_plot.py @@ -6,8 +6,8 @@ import quick_sort as qs if __name__ == "__main__": - filename = "../../seq3.txt" - dummy = read_int_sequence("../../seq3.txt") + filename = "../../seq3_sorted.txt" + dummy = read_int_sequence(filename) n = len(dummy) step = n // 100 diff --git a/SoSe24/lec03_sort_alg/quick_sort.py b/SoSe24/lec03_sort_alg/quick_sort.py index fce1331..f44d975 100644 --- a/SoSe24/lec03_sort_alg/quick_sort.py +++ b/SoSe24/lec03_sort_alg/quick_sort.py @@ -21,16 +21,45 @@ def partition(z: AlgoDatArray, left: int, right: int) -> int: z[i], z[right] = z[right], z[i] return i +def median_pivot(z: AlgoDatArray, left: int, right: int) -> int: + mid = left + (right - left) // 2 + if z[left] < z[right]: + if z[mid] < z[right]: + # right is the largest + if z[mid] < z[left]: + # left is in the middle + z[left], z[right] = z[right], z[left] + else: + # mid is in the middle + z[mid], z[right] = z[right], z[mid] + else: + # right is in the middle + pass + else: + if z[mid] < z[right]: + # right is in the middle + pass + else: + #right is the smallest + if z[mid] < z[left]: + # mid is in the middle + z[mid], z[right] = z[right], z[mid] + else: + # mid is in the middle + z[left], z[right] = z[right], z[left] + return partition(z, left, right) + def quick_sort(z: AlgoDatArray, left: int, right: int): if left < right: q = partition(z, left, right) + #q = median_pivot(z, left, right) quick_sort(z, left, q-1) quick_sort(z, q+1, right) pivot = AlgoDatValue(0) if __name__ == "__main__": - z = read_int_sequence("../../seq0.txt") + z = read_int_sequence("../../seq3.txt") print(z, len(z)) start = pfc() quick_sort(z, 0, z.size-1) diff --git a/seq3_sorted.txt b/seq3_sorted.txt new file mode 100644 index 0000000..86ab216 --- /dev/null +++ b/seq3_sorted.txt @@ -0,0 +1,1000 @@ +-99 +-99 +-99 +-99 +-99 +-99 +-99 +-99 +-99 +-99 +-99 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-98 +-97 +-97 +-97 +-97 +-97 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-96 +-95 +-95 +-95 +-95 +-95 +-95 +-95 +-95 +-95 +-95 +-95 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +-94 +-93 +-93 +-93 +-93 +-93 +-93 +-93 +-93 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-92 +-91 +-91 +-91 +-91 +-91 +-91 +-91 +-91 +-91 +-90 +-90 +-90 +-90 +-90 +-90 +-90 +-90 +-90 +-90 +-90 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-89 +-88 +-88 +-88 +-88 +-88 +-88 +-87 +-87 +-87 +-87 +-87 +-87 +-87 +-87 +-87 +-86 +-86 +-86 +-86 +-86 +-86 +-86 +-86 +-86 +-86 +-86 +-85 +-85 +-85 +-85 +-84 +-84 +-84 +-84 +-84 +-84 +-84 +-84 +-84 +-84 +-83 +-83 +-83 +-83 +-83 +-83 +-83 +-83 +-83 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-82 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-81 +-80 +-80 +-80 +-80 +-80 +-79 +-79 +-79 +-79 +-79 +-79 +-79 +-79 +-79 +-79 +-79 +-78 +-78 +-78 +-78 +-78 +-78 +-78 +-78 +-78 +-78 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-77 +-76 +-76 +-76 +-76 +-76 +-76 +-76 +-76 +-76 +-76 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-75 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-74 +-73 +-73 +-73 +-73 +-73 +-73 +-73 +-73 +-73 +-72 +-72 +-72 +-72 +-72 +-72 +-71 +-71 +-71 +-71 +-71 +-71 +-71 +-71 +-71 +-71 +-71 +-70 +-70 +-70 +-70 +-70 +-70 +-70 +-70 +-70 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-69 +-68 +-68 +-68 +-68 +-68 +-68 +-68 +-67 +-67 +-67 +-67 +-67 +-67 +-67 +-66 +-66 +-66 +-66 +-66 +-66 +-66 +-66 +-66 +-65 +-65 +-65 +-65 +-65 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-64 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-63 +-62 +-62 +-62 +-62 +-62 +-62 +-62 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-61 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-60 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-59 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-58 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-57 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-56 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-55 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-54 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-53 +-52 +-52 +-52 +-52 +-52 +-51 +-51 +-51 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-50 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-49 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-48 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-47 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-46 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-45 +-44 +-44 +-44 +-44 +-44 +-44 +-44 +-44 +-44 +-44 +-44 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-43 +-42 +-42 +-42 +-42 +-42 +-42 +-42 +-42 +-42 +-42 +-41 +-41 +-41 +-41 +-40 +-40 +-40 +-40 +-40 +-40 +-40 +-40 +-40 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-39 +-38 +-38 +-38 +-38 +-38 +-38 +-38 +-38 +-38 +-38 +-37 +-37 +-37 +-37 +-37 +-37 +-37 +-36 +-36 +-36 +-36 +-36 +-36 +-36 +-36 +-35 +-35 +-35 +-35 +-35 +-35 +-34 +-34 +-34 +-34 +-34 +-33 +-33 +-33 +-33 +-33 +-33 +-33 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-32 +-31 +-31 +-31 +-31 +-31 +-31 +-31 +-31 +-31 +-31 +-31 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-30 +-29 +-29 +-29 +-29 +-29 +-29 +-29 +-29 +-29 +-29 +-28 +-28 +-28 +-28 +-28 +-28 +-28 +-28 +-28 +-28 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-27 +-26 +-26 +-26 +-26 +-26 +-26 +-26 +-26 +-26 +-25 +-25 +-25 +-25 +-25 +-25 +-25 +-25 +-24 +-24 +-24 +-24 +-24 +-24 +-24 +-24 +-24 +-24 +-23 +-23 +-23 +-23 +-23 +-23 +-23 +-23 +-23 +-22 +-22 +-22 +-22 +-22 +-22 +-22 +-22 +-22 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-21 +-20 +-20 +-20 +-20 +-20 +-20 +-20 +-20 +-20 +-20 +-20 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-19 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-18 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-17 +-16 +-16 +-16 +-16 +-16 +-16 +-16 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-15 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-14 +-13 +-13 +-13 +-13 +-13 +-13 +-13 +-12 +-12 +-12 +-12 +-12 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-11 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-10 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-9 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-8 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-7 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-6 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-4 +-4 +-4 +-4 +-4 +-4 +-4 +-4 +-3 +-3 +-3 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-2 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1