说明

    利用随机从数组中找出一个数,放到数组最后,然后将小于此数的数放到前边,等于此数的数放到中间,大于此数的数放到末尾,进行递归排序。
    image.png

    1. public static void quickSort (int[] arr, int L, int R) {
    2. if (L < R) {
    3. swap(arr, L + (int) Math.random()* (R - L + 1), R)
    4. int[] p = partition(arr, L, R);
    5. quickSort(arr,L, p[0] - 1);
    6. quickSort(arr,p[1] + 1, R);
    7. }
    8. }
    9. public static int[] partition(int[] arr, int L, int R) {
    10. int less = L - 1; // <区右边界
    11. int more = R; // >区左边界
    12. while (L < more) { // L表示当前数的位置 arr[R] -> 划分值
    13. if (arr[L] < arr[R]) { // 当前数 < 划分值
    14. swap(arr, ++less, L++);
    15. } else if (arr[L] > arr[R]){ // 当前数 > 划分值
    16. swap(arr, --more, L);
    17. } else {
    18. L++;
    19. }
    20. }
    21. swap(arr, more, R);
    22. return new int[] {less + 1,more};
    23. }