Lecture 2
This commit is contained in:
parent
e8feb3ca60
commit
74f4161fe7
@ -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
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user