希尔排序

来源:互联网 发布:算法工程师专业 编辑:程序博客网 时间:2024/06/05 02:05

写得比较简短些,希尔排序就是直接插入排序的强化升级,一般来说,直接排序如果是逆序的数组,那么要后面每个数移动的次数会有很多,那么如果分成3组分别来对比,就意味着10个数的数组只需要比较3次,移动也是最多3次,这样大大增加了算法效率。
这里写图片描述
代码如下:

#include <cstdio>int main(){    int i[11]= {0,10,9,8,7,6,5,4,3,2,1};    int t,b,a,num;    t=10;    do    {        t=t/3+1;        for(a = t+1; a <= 10; a ++)        {            if(i[a]<i[a-t])            {                num=i[a];                for(b = a-t; b >0&&i[b]>num; b-=t)                    i[b+t]=i[b];                i[b+t]=num;            }        }    }    while(t>1);    for( a = 1; a <= 10; a ++)        printf("%d ",i[a]);    return 0;}

分析:
希尔排序 的时间复杂度为O(n^3/2);

原创粉丝点击