java快排代码
public static int Partition(int[] arr, int low, int high) {
// low的值已经被存入tmp,等待被覆盖
int tmp = arr[low];
int l = low, r = high;
while (l < r) {
while (l < r && arr[r] >= tmp) {
r--;
}
if (l < r) {
//接把l中的值覆盖即可,之后r指向的值也没有意义,等待被覆盖
arr[l] = arr[r];
}
while (l < r && arr[l] <= tmp) {
l++;
}
if (l < r) {
//直接把r中的值覆盖即可,之后l指向的值也没有意义,等待被覆盖
arr[r] = arr[l];
}
}
arr[l] = tmp;
return l;
}
public static void quickSort(int[] arr, int l, int r) {
if (l < r) {
int mid = Partition(arr, l, r);
quickSort(arr, l, mid - 1);
quickSort(arr, mid + 1, r);
}
}
public static void main(String[] args) {
int[] arr = {4, 2, 1, 12, 6, 7,};
quickSort.quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}
每次复习都有新的体会,这次被
arr[l] = arr[r];
这句卡住了,需要注意,当移动的指针停住时,若此时l<r
成立,我们只需要把当前移动的指针的值覆盖到另一个指针中即可! 2020/11/9