类别 | | 时间复杂度 | | 稳定性 |
---|
| 平均情况 | 最好情况 | 最差情况 | |
冒泡排序 | O(n²) | O(n) | O(n²) | 稳定 |
选择排序 | O(n²) | O(n²) | O(n²) | 不稳定 |
插入排序 | O(n²) | O(n) | O(n²) | 稳定 |
快速排序 | O(nlog₂n) | O(nlog₂n) | O(n²) | 不稳定 |
package com.netft.count;
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[] a = {5, 3, 7, 2, 1, 9, 8, 4};
sort1(a);
sort2(a);
sort3(a);
sort4(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
private static void sort4(int[] a, int l, int h) {
if (l > h) return;
int p = partition(a, l, h);
sort4(a, p + 1, h);
sort4(a, l, p - 1);
}
private static int partition(int[] a, int l, int h) {
int pv = a[h];
int i = l;
for (int j = l; j < h; j++) {
if (a[j] < pv) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
}
}
int temp = a[i];
a[i] = a[h];
a[h] = temp;
return i;
}
private static void sort3(int[] a) {
for (int i = 1; i < a.length; i++) {
int t = a[i];
int j = i - 1;
while (j >= 0) {
if (a[j] > t) {
a[j + 1] = a[j];
} else {
break;
}
j--;
}
a[j + 1] = t;
}
System.out.println(Arrays.toString(a));
}
private static void sort2(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int min = i;
for (int j = min + 1; j < a.length; j++) {
if (a[min] > a[j]) min = j;
}
if (min != i) {
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
System.out.println(Arrays.toString(a));
}
private static void sort1(int[] a) {
int n = a.length - 1;
while (true) {
int last = 0;
for (int i = 0; i < n; i++) {
if (a[i] > a[i + 1]) {
int temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
last = i;
}
}
n = last;
if (n == 0) break;
}
System.out.println(Arrays.toString(a));
}
}