algo.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include"algo.h"
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<time.h>
  5. void QuickSort(int* arr, int left, int right)
  6. {
  7. //直到不合理情况出现结束递归
  8. if (left >= right)
  9. {
  10. return;
  11. }
  12. //找到"left"对应在数组的位置,并将保存位置的序号赋给position
  13. int position = PartSort(arr, left, right);
  14. //分别对position左右进行进行快速排序
  15. QuickSort(arr, left, position - 1);
  16. QuickSort(arr, position + 1, right);
  17. }
  18. int PartSort(int* arr, int left, int right)
  19. {
  20. int key = arr[left];
  21. //找到"left"的位置,并保证左边比其小,右边比其大
  22. while (left < right) {
  23. while (left < right && arr[right] >= key)
  24. {
  25. right--;
  26. }
  27. swap(arr, left, right);
  28. while (left < right && arr[left] <= key)
  29. {
  30. left++;
  31. }
  32. swap(arr, left, right);
  33. }
  34. //将找出的最终位置返回
  35. return left;
  36. }
  37. void swap(int* arr, int left, int right)
  38. {
  39. int temp = 0;
  40. temp = arr[right];
  41. arr[right] = arr[left];
  42. arr[left] = temp;
  43. }