快速排序

python版本

  1. def partition(arr, low, high):
  2. left = low # 最小元素索引
  3. pivot = arr[high]
  4. for j in range(low, high):
  5. # 当前元素小于或等于 pivot
  6. if arr[j] <= pivot:
  7. arr[left], arr[j] = arr[j], arr[left]
  8. left += 1
  9. arr[left], arr[high] = arr[high], arr[left]
  10. return left
  11. # arr[] --> 排序数组
  12. # low --> 起始索引
  13. # high --> 结束索引
  14. # 快速排序函数
  15. def quickSort(arr, low, high):
  16. if low < high:
  17. pi = partition(arr, low, high)
  18. quickSort(arr, low, pi - 1)
  19. quickSort(arr, pi + 1, high)
  20. arr = [10, 7, 8, 9, 1, 5]
  21. quickSort(arr, 0, len(arr) - 1)
  22. print(arr)

java版

  1. /**
  2. * @Description
  3. * 快速排序 参考视频:https://www.bilibili.com/video/av39519566/
  4. * @Author 田云
  5. * @Date 2019/6/10 11:14
  6. * @Version 1.0
  7. */
  8. public class QuickSort {
  9. public static void main(String[] args) {
  10. int[] array = {2, 4, 6, 8, 5, 4, 6, 2, 6};
  11. quickSort(array, 0, array.length - 1);
  12. for (int i : array) {
  13. System.out.println(i);
  14. }
  15. }
  16. public static void quickSort(int[] array, int left, int right) {
  17. if (left >= right) {
  18. return;
  19. }
  20. int base = array[left];
  21. int i = left;
  22. int j = right;
  23. while (i != j) {
  24. while (array[j] >= base && i < j) {
  25. j--;
  26. }
  27. while (array[i] <= base && i < j){
  28. i++;
  29. }
  30. /**
  31. * 交换
  32. */
  33. int tmp = array[i];
  34. array[i] = array[j];
  35. array[j] = tmp;
  36. }
  37. array[left] = array[i];
  38. array[i] = base;
  39. quickSort(array, left, i - 1);
  40. quickSort(array, i + 1, right);
  41. }
  42. }