希尔排序算法

活动地址:CSDN21天学习挑战赛

目录

一、基本思想

二、希尔排序的过程

三、增量的确定

四、实例

五、时间性能分析

一、基本思想

     将整个待排记录分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列中的记录基本有序时,对全体记录进行直接插入排序。

 二、希尔排序的过程

 相同的颜色为一组,组内使用直接插入排序。

三、增量的确定

      将相隔某个“增量”的记录组成一个子序列

      d1=n/2,di+1=d/2;

      算法描述

     for(d=n/2;d>=1;d=d/2){

      以d为增量,进行组内直接插入排序;}

四、实例

    输入:4 32 12 8 10 24 2 6 68 36

     使用希尔排序,输出希尔排序每趟的排序结果和最终的排序结果 

代码:

int main(){

int a[11];

int k,d,i,j;

for(k=1;k<=10;k++){

  cin>>a[k];}

for(d=5;d>=1;d=d/2){//改变增量d,分割待排序列

   for(i=d+1;i<=10;i++){//子序列直接插入排序

      a[0]=a[i];

        j=i-d;

    while(j>0&&a[0])<a[j]){

         a[j+d]=a[j];

         j=j-d;}

      a[j+d]=a[0];}

   printf("d=%d的排序结果:",d);

  for(k=1;k<=10;k++){

     cout<<a[k]<<" ";}

     cout<<endl;}

cout<<"最终的排序结果:";

for(k=1;k<=10;k++){

  cout<<a[k]<<" ";}

return 0;}

 运行结果:

 五、时间性能分析

希尔排序开始时增量较大,每个子序列中的记录个数较少,从而排序速度较快;当增量减少,每个子序列的记录个数较多,但整个序列已基本有序,所以排序速度也比较快。

当n在某个确定的范围内时,希尔排序所需的比较次数和记录的移动次数约为O(n^1.3)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值