排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|---|
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | In-place | 稳定 |
选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | In-place | 不稳定 |
插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | In-place | 稳定 |
希尔排序 | O(n log n) | O(n log^2 n) | O(n log^2 n) | O(1) | In-place | 不稳定 |
归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | Out-place | 稳定 |
快速排序 | O(n log n) | O(n log n) | O(n^2) | O(log n) | In-place | 不稳定 |
堆排序 | O(n log n) | O(n log n) | O(n log n) | O(1) | In-place | 不稳定 |
计数排序 | O(n+k) | O(n+k) | O(n+k) | O(k) | Out-place | 稳定 |
桶排序 | O(n+k) | O(n+k) | O(n^2) | O(n+k) | Out-place | 稳定 |
基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | Out-place | 稳定 |
例子
1.冒泡排序
public class BubbleSort {
private int[] array;
public BubbleSort(int[] array) {
this.array = array;
}
public static void main(String[] args) {
int[] array= {77,66,22,11,44,33,55};
BubbleSort bs = new BubbleSort(array);
System.out.println("排序前:");
bs.display();
System.out.println("排序后:");
bs.bubble();
bs.display();
}
public void bubble() {
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
if (array[j]>array[j+1]) {
int t=array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
}
public void display() {
for (int i : array) {
System.out.print(i+" ");
}
System.out.println();
}
}
2.插入排序
public class InsertSort {
private int[] array;
public InsertSort(int[] array) {
this.array = array;
}
public void insert() {
for(int index = 1; index<array.length; index++){//外层向右的index,即作为比较对象的数据的index
int temp = array[index];//用作比较的数据
int leftindex = index-1;
while(leftindex>=0 && array[leftindex]>temp){//当比到最左边或者遇到比temp小的数据时,结束循环
array[leftindex+1] = array[leftindex];
leftindex--;
}
array[leftindex+1] = temp;//把temp放到空位上
}
}
public void display() {
for (int i : array) {
System.out.print(i+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array = {33,66,11,55,77,22,44};
InsertSort is = new InsertSort(array);
System.out.println("排序前:");
is.display();
System.out.println("排序后:");
is.insert();
is.display();
}
}
3.选择排序
public class SelectSort {
private int[] array;
public SelectSort(int[] array) {
this.array = array;
}
public void select() {
for (int i = 0; i < array.length-1; i++) {
int index=i;
for (int j = i+1; j < array.length; j++) {
if (array[index]>array[j]) {
index=j;
}
}
int tem = array[i];
array[i]=array[index];
array[index]=tem;
}
}
public void display() {
for (int i : array) {
System.out.print(i+" ");
}
System.out.println();
}
public static void main(String[] args) {
int[] array= {44,22,77,11,33,55,66};
SelectSort ss = new SelectSort(array);
System.out.println("排序前:");
ss.display();
System.out.println("排序后:");
ss.select();
ss.display();
}
}