|
123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from SoSe24.algodat.foundation import AlgoDatArray, AlgoDatValue, read_int_sequence
- from time import perf_counter as pfc
-
-
- def merge_sort(z: AlgoDatArray, buffer: AlgoDatArray, left: int, right: int):
- if left == right:
- return
- mid = (left + right) // 2
- merge_sort(z, buffer, left, mid)
- merge_sort(z, buffer, mid + 1, right)
- left_ptr = left
- right_ptr = mid+1
- storage_ptr = left
- while left_ptr <= mid or right_ptr <= right:
- if left_ptr <= mid and right_ptr <= right:
- if z[left_ptr] < z[right_ptr]:
- buffer[storage_ptr].value = z[left_ptr].value
- left_ptr += 1
- storage_ptr += 1
- else:
- buffer[storage_ptr].value = z[right_ptr].value
- right_ptr += 1
- storage_ptr += 1
- elif left_ptr <= mid:
- buffer[storage_ptr].value = z[left_ptr].value
- left_ptr += 1
- storage_ptr += 1
- else:
- buffer[storage_ptr].value = z[right_ptr].value
- right_ptr += 1
- storage_ptr += 1
- for i in range(left, right):
- z[i].value = buffer[i].value
-
-
- if __name__ == "__main__":
- z = read_int_sequence("../../seq0.txt")
- print(z, len(z))
- start = pfc()
- storage = AlgoDatArray(z.size) # buffer
- AlgoDatValue.summary()
- merge_sort(z, storage, 0, z.size-1)
- print(z)
- print(f"Dauer: {pfc() - start:.4f}s")
- AlgoDatValue.summary()
|