人的知识就好比一个圆圈,圆圈里面是已知的,圆圈外面是未知的。你知道得越多,圆圈也就越大,你不知道的也就越多。

0%

排序--快速排序

概念

采用归并思想/分治法:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

时间复杂度

  • 平均:O(nlog(n))
  • 最好:O(nlog(n))
  • 最坏:O(n²)

空间复杂度

O(1)

稳定性

不稳定

代码

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class QuickSort implements Sort {

@Override
public int[] sort(int[] arr) {
return sort(arr, 0, arr.length - 1);
}

private int[] sort(int[] arr, int l, int h) {
// 选择第一个元素作为分区点
int pivot = arr[l];

int i = l;
int j = h;

while (i < j) {
while (arr[i] < pivot) {
i++;
}

while (arr[j] > pivot) {
j--;
}

if (arr[i] == arr[j]) {
i++;
} else {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}

if (i - 1 > l) {
sort(arr, l, i - 1);
}

if (j + 1 < h) {
sort(arr, j + 1, h);
}

return arr;
}
}
小礼物走一走,来 Github 关注我