3—-插入排序

主要思想:每趟排序使局部有序,比如,选择一个选择一个需要排序的数据,那么他的前面所有数据都是排好序的,后面是无序的,将这个数插入到前面合适的位置,然后重复这个过程;

           插入数据时,插入位置的数字需要向后移动,所以现将待排序的数据取出,留出一个空位置,这样可以使前面的数据向后移动,然后插入到合适位置;

代码如下:

         public void insertSort(){
        int in,out;
        for(out=1;out<nElems;out++){
            long  temp=a[out];
            in=out;
            while(in>0 && a[in-1]>=temp){
                a[in]=a[in-1];
                --in;
            }
            a[in]=temp;
        }
        
    }

算法分析:

        比较次数:第一次最多需要1次比较,第二趟最多需要3次,,,,,因此有1+2+3+4.。。N-1=N*(N-1)/2,然而,随机数据,凭据只有的数据进行了比较,所以标记次数为N*(N-1)/4,复制的次数大致等于比较的次数。然而比较时间和幅值时间不同,所以相对于冒泡排序,时间快一倍,比选择排序略快。时间复杂度为O(N^2).

如果数据是有序的,插入排序明显更好,但是如果是逆序,并不比冒泡好、

 

posted @ 2016-09-30 00:46  一天到晚游泳的fish  阅读(88)  评论(0)    收藏  举报