1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| public static void quickSort(int[] nums, int left, int right) {
if (left < right) {
// 基准点
int pivot = partition(nums, left, right);
// 分治递归
quickSort(nums, left, pivot - 1);
quickSort(nums, pivot + 1, right);
}
}
private static int partition(int[] nums, int left, int right) {
// 随机选取一个元素作为基准
int pivot = nums[left];
int i = left, j = right + 1;
while (true) {
// 从左往右找第一个大于 pivot 的数
while (nums[++i] < pivot && i < right) {
}
// 从右往左找第一个小于 pivot 的数
while (nums[--j] > pivot && j > left) {
}
if (i >= j) {
break;
}
swap(nums, i, j);
}
swap(nums, left, j);
return j;
}
|