|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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] = 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: |
|
|
print(" Genommen: ", z[right_ptr]) |
|
|
|
|
|
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 |
|
|
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) |