Lecture 2

This commit is contained in:
Oliver Hofmann 2024-04-11 10:05:53 +02:00
parent e8feb3ca60
commit 74f4161fe7
3 changed files with 10 additions and 20 deletions

View File

@ -325,7 +325,6 @@ def read_int_sequence(filename: str) -> AlgoDatArray:
with open(filename, "r") as file: with open(filename, "r") as file:
l = list(map(int, file.read().split())) l = list(map(int, file.read().split()))
a = AlgoDatArray(len(l)) a = AlgoDatArray(len(l))
AlgoDatValue.memory -= len(l)
for i in range(len(l)): for i in range(len(l)):
a.set(i, AlgoDatValue(l[i])) a[i].value = l[i]
return a return a

View File

@ -3,50 +3,41 @@ from time import perf_counter as pfc
def merge_sort(z: AlgoDatArray, storage: AlgoDatArray, left: int, right: int): def merge_sort(z: AlgoDatArray, storage: AlgoDatArray, left: int, right: int):
print(left, right)
if left == right: if left == right:
return return
mid = (left + right) // 2 mid = (left + right) // 2
merge_sort(z, storage, left, mid) merge_sort(z, storage, left, mid)
merge_sort(z, storage, mid+1, right) merge_sort(z, storage, mid+1, right)
left_ptr = left left_ptr = left
right_ptr = right right_ptr = mid+1
storage_ptr = left storage_ptr = left
print("left: ", end="")
for i in range(left, mid+1):
print(z[i], " ", end="")
print(" right: ", end="")
for i in range(mid+1, right+1):
print(z[i], " ", end="")
while left_ptr <= mid or right_ptr <= right: while left_ptr <= mid or right_ptr <= right:
if left_ptr <= mid and right_ptr <= right: if left_ptr <= mid and right_ptr <= right:
print("Beides ", z[left_ptr], " ", z[right_ptr])
if z[left_ptr] < z[right_ptr]: if z[left_ptr] < z[right_ptr]:
print(" Genommen: ", z[left_ptr]) storage[storage_ptr].value = z[left_ptr].value
storage[storage_ptr] = z[left_ptr]
left_ptr += 1 left_ptr += 1
storage_ptr += 1 storage_ptr += 1
else: else:
print(" Genommen: ", z[right_ptr]) storage[storage_ptr].value = z[right_ptr].value
storage[storage_ptr] = z[right_ptr]
right_ptr += 1 right_ptr += 1
storage_ptr += 1 storage_ptr += 1
elif left_ptr <= mid: elif left_ptr <= mid:
storage[storage_ptr] = z[left_ptr] storage[storage_ptr].value = z[left_ptr].value
left_ptr += 1 left_ptr += 1
storage_ptr += 1 storage_ptr += 1
else: else:
storage[storage_ptr] = z[right_ptr] storage[storage_ptr].value = z[right_ptr].value
right_ptr += 1 right_ptr += 1
storage_ptr += 1 storage_ptr += 1
for i in range(left, right+1): for i in range(left, right+1):
z[i] = storage[i] z[i].value = storage[i].value
if __name__ == "__main__": if __name__ == "__main__":
z = read_int_sequence("../../seq0.txt") z = read_int_sequence("../../seq0.txt")
print(z, len(z))
start = pfc() start = pfc()
storage = AlgoDatArray(z.size) storage = AlgoDatArray(z.size) # Zwischenspeicher
AlgoDatValue.summary() AlgoDatValue.summary()
merge_sort(z, storage, 0, z.size-1) merge_sort(z, storage, 0, z.size-1)
print(z) print(z)