稳定 基于移动元素
适合于元素个数较少,基本有序的情况
将关键字序列的第一个关键字看成一个有序的序列,然后将第二个插入到有序序列的合适位置,此时,有序序列长度加一
一次将后面的关键字插入到有序子序列的合适位置,使得有序子序列的长度递增,直到待排序序列的元素插入完
public static void insertSort(int[] array){ //将第一个元素看成是已经有序的序列,从第二个元素开始, //如果当前元素大于等于已有序序列的随后一个元素,直接将当前元素放在已有序序列的尾部 //如果当前元素小于已有序序列的随后一个元素,需要将当前元素插入已有序序列的合适位置 //先记录当前元素,将大于当前元素的元素后移 for(int i=1;i<array.length;i++){ int temp = array[i]; if(array[i]<array[i-1]){ int j=i-1; for(;j>=0&&array[j]>temp;j--){ array[j+1] = array[j]; } array[j+1] = temp; } listArray(array); } }
最好:待排序序列有序 O(n)
最坏、平均:O(n^2)