几种常用的排序方法
常用排序方法表
排序方法 | 最好时间复杂度 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 |
冒泡排序 | O(N) | O(N^2) | O(N^2) | O(1) | 稳定 |
插入排序 | O(N) | O(N^2) | O(N^2) | O(1) | 稳定 |
归并排序 | O(N*logN) | O(N*logN) | O(N*logN) | O(N*logN) | 稳定 |
快速排序 | O(N*logN) | O(N*logN) | O(N^2) | O(logN) | 不稳定 |
选择排序 | O(N^2) | O(N^2) | O(N^2) | O(1) | 不稳定 |
希尔排序 | O(N) | O(N^1.5) | O(N^2) | O(1) | 不稳定 |
堆排序 | O(N*logN) | O(N*logN) | O(N*logN) | O(1) | 不稳定 |
|
冒泡排序
public void bubbleSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
Boolean flg = true;
for (int j = arr.length-1; j > i; j--) {
if (arr[j] < arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
flg = false;
}
}
if (flg)break;
}
}
直接插入排序
public void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 && arr[j] < arr[j-1]; j--) {
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
选择排序
public void selectSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
int min = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[min])min = j;
}
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}