排序(六)插入排序

参考文章:

 

算法描述:

对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止

 

代码实现:

    public void insertSort(int a[]){  
            int length=a.length; //数组长度  
            int j;               //当前值的位置  
            int i;               //指向j前的位置  
            int key;             //当前要进行插入排序的值  
            //从数组的第二个位置开始遍历值  
            for(j=1;j<length;j++){  
                key=a[j];  
                i=j-1;  
                //a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移  
                while(i>=0 && a[i]>key){  
                    a[i+1]=a[i]; //将a[i]值后移  
                    i--;         //i前移  
                }//跳出循环(找到要插入的中间位置或已遍历到0下标)  
                a[i+1]=key;    //将当前值插入  
            }  
        }  

 

算法分析:

  • 时间复杂度:O(n2)  最好O(n) 最坏O(n2
  • 空间复杂度:O(1)  用于记录需要插入的数据
  • 稳定性:稳定
posted @ 2018-01-14 15:43  情歌z  阅读(154)  评论(0编辑  收藏  举报