quicksort

特征

  1. 时间复杂度是O(n*logn)
  2. 不稳定

递归三要素

参数、终止条件、返回值

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
private void (int[] array, int left, int right) {
if (left >= right) {
return;
}
int n = partition(array, left, right); // 切分
help(array, left, n - 1); //将左半部分排序
help(array, n + 1, right); //将右半部分排序
}

private int partition(int[] array, int left, int right) {
int v = array[left];
while (true) {
while (v > array[left]) {
left++;
}
while (v < array[right]) {
right--;
}
if (left >= right) {
break;
}
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
}
return left;
}