插入排序,在数据量大的时候,比冒泡要好。插入排序的思想用摸牌来比喻,会更容易理解:
假设手头上已有1张牌
摸张新牌,和手头上的牌逐个比较,从最后那张开始,小的话,手头上的牌移位
新牌入序列
所以:
步骤一:外层循环,从1开始,假设手头上已经有1张牌了
步骤二:摸一張牌,放在临时区;
步骤三:手头上的牌,从后往前遍历,与临时区的牌比较,手头上的大,那么移位
public static void insertSort(int[] a, int length) {
int i,j,temp;
for(i=1;i<length;i++) {
//摸一张牌
temp = a[i];
//手头的牌和新牌比较,大了才移位
for(j=i-1;j>=0 && a[j]>temp;j--) {
a[j+1] = a[j];
}
//新牌入序列
a[j+1] = temp;
}
}
时间复杂度,与冒泡一样,最好O(n),最坏O(n^2),结果与数据的初始状态有关,初始数据越有序,insertion/bubble就约快