希尔排序

流过昼夜 提交于 2019-11-26 15:52:55

希尔排序

不断缩小增量的插入排序

原理

以某个增量h为步长跳跃分组进行插入排序,增量是一个从h逐渐缩小至1的过程,所以又称缩小增量排序。 

其核心在于间隔序列设定,是与插入排序的本质区别。插入排序始终增量为1。 

最佳增量: k趟排序增量步长为(2^k)-1,即增量序列(2^k)-1,…15,7,3,1

分析

时间复杂度:nlogn

代码

void shellsort(int a[],int len){
    int gap = len;
    while(gap = gap/2){//增量
        for(int i=gap;i<len;i++){//下面的就是插入排序,间距为gap
            int key=a[i];
            int j=i-gap;
            while(j>=0 && a[j]>key){
                a[j+gap] = a[j];
                j-=gap;
            }
            a[j+gap] = key;
        }
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!