希尔排序

33 篇文章 0 订阅
28 篇文章 0 订阅

希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。

一、基本思想
  对待排记录序列先作“宏观”调整,再作“微观”调整。
  所谓“宏观”调整,指的是 “跳跃式”的插入排序。即:将记录序列分成若干子序列,每个子序列分别进行插入排序。关键是,这种子序列不是由相邻的记录构成的。假设将n个记录分成d个子序列,则这d个子序列分别为:
                                 { R[1],R[1+d],R[1+2d],…,R[1+kd] }
                                 { R[2],R[2+d],R[2+2d],…,R[2+kd] }
                                  …
                                 { R[d],R[2d],R[3d],…,R[kd],R[(k+1)d] }
  其中,d称为增量,它的值在排序过程中从大到小逐渐缩小,直至最后一趟排序减为1。
  下图为希尔排序示意图:
    
二、希尔排序的实现

复制代码
代码
 #include<iostream>
using namespace std;
void ShellSort(int a[],int k[],int len)
 {
   for(int m=0;m<3;m++)
   {    int dk=k[m];
        for(int i=dk;i<len;i++) 
       { 
          if(a[i]<a[i-dk])
          {
             int temp=a[i];
              int j;
              for(j=i-dk;j>=0&&a[j]>temp;j-=dk)
              {
                   a[j+dk]=a[j];
                }
            a[j+dk]=temp;
         } 
     }
   } 
 } 
 int main()
{
   int Data[10]={14,58,69,48,97,325,6525,54,5,74};
   int k[3]={5,3,1};
   ShellSort(Data,k,10);
    for(int i=0;i<10;i++)
   cout<<Data[i]<<" "; 
   return 0;
} 


复制代码

三、时间复杂度分析

  大量研究证明,若增量序列的取值比较合理,希尔排序时关键字比较次数和记录移动次数接近于O(n(log2n)2)
  由于希尔排序法是按增量分组进行的排序,所以希尔排序是不稳定的排序。
  希尔排序法适用于中等规模的记录序列的排序的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值