You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

quick_sort.py 1015B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from SoSe24.algodat.foundation import AlgoDatArray, AlgoDatValue, read_int_sequence
  2. from time import perf_counter as pfc
  3. def partition(z: AlgoDatArray, left: int, right: int) -> int:
  4. global pivot
  5. pivot.value = z[right]
  6. i = left
  7. j = right - 1
  8. while i < j:
  9. while z[i] < pivot:
  10. i += 1
  11. while z[j] > pivot:
  12. j -= 1
  13. if i < j:
  14. z[i], z[j] = z[j], z[i]
  15. i += 1
  16. j -= 1
  17. if i==j and z[i] < pivot:
  18. i += 1
  19. if z[i] != pivot:
  20. z[i], z[right] = z[right], z[i]
  21. return i
  22. def quick_sort(z: AlgoDatArray, left: int, right: int):
  23. if left < right:
  24. q = partition(z, left, right)
  25. quick_sort(z, left, q-1)
  26. quick_sort(z, q+1, right)
  27. pivot = AlgoDatValue(0)
  28. if __name__ == "__main__":
  29. z = read_int_sequence("../../seq0.txt")
  30. print(z, len(z))
  31. start = pfc()
  32. quick_sort(z, 0, z.size-1)
  33. print(z)
  34. print(f"Dauer: {pfc() - start:.4f}s")
  35. AlgoDatValue.summary()