稳定                    基于移动元素            

适合于元素个数较少,基本有序的情况

将关键字序列的第一个关键字看成一个有序的序列,然后将第二个插入到有序序列的合适位置,此时,有序序列长度加一

一次将后面的关键字插入到有序子序列的合适位置,使得有序子序列的长度递增,直到待排序序列的元素插入完

    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)