排序算法——插入排序

插入排序是比选择排序更加优化的算法。

原理是把原数组分割成前后两部分,不断的把后面一部分提到前面来,然后进行排序:

原数组:9,8,7,6,5,4,3,2,1

第一轮:8,9,7,6,5,4,3,2,1

第二轮:7,8,9,6,5,4,3,2,1

第二轮:6,7,8,9,5,4,3,2,1

*

*

第八轮:2,3,4,5,6,7,8,9,1

第九轮:1,2,3,4,5,6,7,8,9

 

分析:这个算法最差情况是和选择排序一样的N2/2次遍历,但是因为前部分的数组为排序数组,所以当你发现已经找到数组排序准确位置之后随时可以暂停遍历。。所以这个排序算法优于选择排序,至于多优化,需要看这个数组是否有序。有序程度越高

如果面对一个完全有序的数组达到最优N次遍历。但是如果使用选择排序那么还是会N2/2次遍历。

 

这个算法的缺陷在于每一次选元素遍历之后数组都需要大规模的移动,因此交换的方法调用会频繁一点,有时候也会影响性能。如果使用链表的话效果大概会好很多可以直接插到相应的位置上,如果不使用链表那么就需要大规模改动数组

代码如下

//遍历整个数组
        //遍历内部数组
        //内部数组排序
        for(int i=0;i<a.length;i++){
            for(int j=i;j>0;j--){
                //compare方法比较两个对象的大小关系
                if(    compare(a[j],a[j-1])>0){
                    //compare比较如果大于则使用exch方法交换位置
                    exch(a,j,j-1);
                }else{
                    continue;
                }
            }
        }
    }

 

posted @ 2017-12-12 09:44  酒皇  阅读(184)  评论(0编辑  收藏  举报