From 1af49ede8c28eebeec87e7676cac4a741fb38c6f Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Tue, 8 Apr 2025 11:25:57 +0200 Subject: [PATCH] Quick Sort and Heap Sort --- praktika/02_merge_sort/merge_sorting.py | 33 +++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/praktika/02_merge_sort/merge_sorting.py b/praktika/02_merge_sort/merge_sorting.py index 34c6a58..723e369 100644 --- a/praktika/02_merge_sort/merge_sorting.py +++ b/praktika/02_merge_sort/merge_sorting.py @@ -21,27 +21,25 @@ def merge_sort_stepwise(z: MemoryArray, l: Literal = None, r: Literal = None, bu yield from merge(z, l, m, r, buffer) def merge(z: MemoryArray, l: Literal, m: Literal, r: Literal, buffer: MemoryArray): - i = MemoryCell(l) - j = MemoryCell(m.succ()) - k = MemoryCell(l) - while i <= m and j <= r: - if z[i] <= z[j]: + with MemoryCell(l) as i, MemoryCell(m.succ()) as j, MemoryCell(l) as k: + while i <= m and j <= r: + if z[i] <= z[j]: + buffer[k].set(z[i]) + i = i.succ() + else: + buffer[k].set(z[j]) + j = j.succ() + k = k.succ() + while i <= m: buffer[k].set(z[i]) i = i.succ() - else: + k = k.succ() + while j <= r: buffer[k].set(z[j]) j = j.succ() - k = k.succ() - while i <= m: - buffer[k].set(z[i]) - i = i.succ() - k = k.succ() - while j <= r: - buffer[k].set(z[j]) - j = j.succ() - k = k.succ() - for k in mrange(l, r.succ()): - z[k].set(buffer[k]) + k = k.succ() + for k in mrange(l, r.succ()): + z[k].set(buffer[k]) yield z def merge_sort(z: MemoryArray): @@ -51,7 +49,6 @@ def merge_sort(z: MemoryArray): next(sort_generator) except StopIteration: break - # print(len(z), z.count_compares(), MemoryManager.get_instance().count_compares()) def sort_file(filename, sort_func): z = MemoryArray.create_array_from_file(filename)