1 冒泡排序 + 插入排序 + 選擇排序
- 原地排序:空間複雜度 O(1)
- 穩定:待排序的序列中存在相等的元素,經過排序後,相等的元素前後順序沒有改變;
|
是否原地排序 |
是否穩定 |
最好 |
最壞 |
平均 |
冒泡 |
✔ |
✔ |
O(N) |
O(N^2) |
O(N^2) |
插入 |
✔ |
✔ |
O(N) |
O(N^2) |
O(N^2) |
選擇 |
✔ |
✘ |
O(N^2) |
O(N^2) |
O(N^2) |
1.1 冒泡排序
- 當某次冒泡已經沒有數據交換,說明已經達到完全有序,不用再繼續執行後續的冒泡操作;
public static void bubbleSort(int[] a, int n) {
for (int i = 0; i < n; i++) {
boolean flag = false;
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
}
public static void main(String[] args) {
int[] a = {2, 4, 6, 5, 3, 8, 7};
bubbleSort(a, a.length);
System.out.println(Arrays.toString(a));
}