Quick Sort and Heap Sort

This commit is contained in:
Oliver Hofmann 2025-04-08 11:25:57 +02:00
parent 27a37037d1
commit 1af49ede8c

View File

@ -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) yield from merge(z, l, m, r, buffer)
def merge(z: MemoryArray, l: Literal, m: Literal, r: Literal, buffer: MemoryArray): def merge(z: MemoryArray, l: Literal, m: Literal, r: Literal, buffer: MemoryArray):
i = MemoryCell(l) with MemoryCell(l) as i, MemoryCell(m.succ()) as j, MemoryCell(l) as k:
j = MemoryCell(m.succ()) while i <= m and j <= r:
k = MemoryCell(l) if z[i] <= z[j]:
while i <= m and j <= r: buffer[k].set(z[i])
if z[i] <= z[j]: i = i.succ()
else:
buffer[k].set(z[j])
j = j.succ()
k = k.succ()
while i <= m:
buffer[k].set(z[i]) buffer[k].set(z[i])
i = i.succ() i = i.succ()
else: k = k.succ()
while j <= r:
buffer[k].set(z[j]) buffer[k].set(z[j])
j = j.succ() j = j.succ()
k = k.succ() k = k.succ()
while i <= m: for k in mrange(l, r.succ()):
buffer[k].set(z[i]) z[k].set(buffer[k])
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])
yield z yield z
def merge_sort(z: MemoryArray): def merge_sort(z: MemoryArray):
@ -51,7 +49,6 @@ def merge_sort(z: MemoryArray):
next(sort_generator) next(sort_generator)
except StopIteration: except StopIteration:
break break
# print(len(z), z.count_compares(), MemoryManager.get_instance().count_compares())
def sort_file(filename, sort_func): def sort_file(filename, sort_func):
z = MemoryArray.create_array_from_file(filename) z = MemoryArray.create_array_from_file(filename)