直接插入排序
每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
时间复杂度:O(n^2)。
如下面的例子:
下面我们用 java 来实现一下它。
/* * 直接插入排序 * 时间复杂度 :O(n^2) * 稳定:没有跳跃式的比较 */ public static void insertSort(int[] array){ int temp = 0,j; for(int i = 1;i < array.length;i++){ temp = array[i];//从i号位置开始进行排序。 for(j =i-1;j >= 0;j--){ if(array[j] > temp){ array[j+1] = array[j]; } else {//每次排序过后前面已经有序,找到第一个比temp小的。 break; } } array[j+1] = temp; } }测试:
public static void main(String[] args){ int[] array = {23,31,12,21,3,1,5}; insertSort(array); show(array); }结果为:1 3 5 12 21 23 31