说明
利用随机从数组中找出一个数,放到数组最后,然后将小于此数的数放到前边,等于此数的数放到中间,大于此数的数放到末尾,进行递归排序。
public static void quickSort (int[] arr, int L, int R) {if (L < R) {swap(arr, L + (int) Math.random()* (R - L + 1), R)int[] p = partition(arr, L, R);quickSort(arr,L, p[0] - 1);quickSort(arr,p[1] + 1, R);}}public static int[] partition(int[] arr, int L, int R) {int less = L - 1; // <区右边界int more = R; // >区左边界while (L < more) { // L表示当前数的位置 arr[R] -> 划分值if (arr[L] < arr[R]) { // 当前数 < 划分值swap(arr, ++less, L++);} else if (arr[L] > arr[R]){ // 当前数 > 划分值swap(arr, --more, L);} else {L++;}}swap(arr, more, R);return new int[] {less + 1,more};}
