希尔排序算法

发布于:2023-01-14 ⋅ 阅读:(396) ⋅ 点赞:(0)

活动地址: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)


网站公告

今日签到

点亮在社区的每一天
去签到