image.png

    1. /**
    2. * 快速排序法
    3. * 6,1,2,7,9,11,4,5,10,8
    4. * i=4,j=4,arr is 4,1,2,5,6,11,9,7,10,8
    5. * i=2,j=2,arr is 2,1,4,5,6,11,9,7,10,8
    6. * i=1,j=1,arr is 1,2,4,5,6,11,9,7,10,8
    7. * i=0,j=0,arr is 1,2,4,5,6,11,9,7,10,8
    8. * i=3,j=3,arr is 1,2,4,5,6,11,9,7,10,8
    9. * i=9,j=9,arr is 1,2,4,5,6,8,9,7,10,11
    10. * i=6,j=6,arr is 1,2,4,5,6,7,8,9,10,11
    11. * i=5,j=5,arr is 1,2,4,5,6,7,8,9,10,11
    12. * i=7,j=7,arr is 1,2,4,5,6,7,8,9,10,11
    13. * i=8,j=8,arr is 1,2,4,5,6,7,8,9,10,11
    14. * 1,2,4,5,6,7,8,9,10,11
    15. * 2022/2/7 18:21
    16. */
    17. public class Demo1 {
    18. public static void quickSort(int[] arr, int begin, int end) {
    19. // 边界
    20. if (begin > end)
    21. return;
    22. // 初始值:以第一个为基准值
    23. int base = arr[begin];
    24. int i = begin;
    25. int j = end;
    26. while (i != j) {
    27. while (arr[j] >= base && j > i) {
    28. j--;
    29. }
    30. while (arr[i] <= base && j > i) {
    31. i++;
    32. }
    33. if (j > i) {
    34. // 当右边的值比基准值小,左边的值比基准值大
    35. int t = arr[i];
    36. arr[i] = arr[j];
    37. arr[j] = t;
    38. }
    39. }
    40. // 交换基准值
    41. arr[begin] = arr[i];
    42. arr[i] = base;
    43. System.out.println("i=" + i + ",j=" + j + ",arr is " + toString(arr));
    44. // 递归左边
    45. quickSort(arr, begin, i - 1);
    46. // 递归右边
    47. quickSort(arr, i + 1, end);
    48. }
    49. public static void main(String[] args) {
    50. int[] ints = {6, 1, 2, 7, 9, 11, 4, 5, 10, 8};
    51. System.out.println(toString(ints));
    52. quickSort(ints, 0, 9);
    53. System.out.println(toString(ints));
    54. }
    55. public static String toString(int[] ints) {
    56. StringBuilder sb = new StringBuilder();
    57. for (int i = 0; i < ints.length; i++) {
    58. sb.append(ints[i]);
    59. if (i < ints.length - 1) {
    60. sb.append(",");
    61. }
    62. }
    63. return sb.toString();
    64. }
    65. }

    参考博客: https://blog.csdn.net/qq_40941722/article/details/94396010