希尔排序如何使用c++语言实现

2025-10-23 10:43:45

1、shell sort是一种递减增量的排序算法,该算法是如何操作的。

下面我们大小为9的数组进行演示:54、26、93、17、31、44、55、20

希尔排序如何使用c++语言实现

2、令数据间隔为3,将该数组分成三个子数组,如下图所示,为下图中灰色的部分。

希尔排序如何使用c++语言实现

3、对每一个子数组都进行插入排序操作,将排序好的子数组合并到一个数组当中。这个时候,你会发现,每个数字都会务必接近他应该存在的位置。

希尔排序如何使用c++语言实现

4、这是间隔为3的子数组排序后的结果,发现该排序后的数列非常离露接近我们需要的递减或者递增序列。下一捧罩步只需要,缩小间隔进行重复性操作即可

希尔排序如何使用c++语言实现

5、改变间隔,使间隔变成4这个时候子数组反而有4组。这个说明希尔排肺联凤序(shell sort)是一个不稳定的排序。

希尔排序如何使用c++语言实现

6、这是一个改进后的shell sort代码

#include <iostream>

using namespace std;

void shellsort(int arr[],int n)

{

      for(int gap=n/2;gap>0;gap/=2)

      {

            //do a gapped insertion sort for this gap size

            for (int i=gap;i<n;i++)

            {

                  int temp=arr[i];

                  int j;

                  for (j=i;j>=gap&&arr[j-gap]>temp;j=j-gap)

                        arr[j]=arr[j-gap];

                  arr[j]=temp;

            }

      }

}

void printarray(int arr[],int n)

{

      for (int i=0;i<n;i++)

            cout<<arr[i]<<" ";

}

int main()

{

    int a[]={12, 34, 54, 2, 3,16,28,1,46};

    int n=sizeof(a)/sizeof(int);

    shellsort(a,n);

    printarray(a,n);

    return 0;

}

希尔排序如何使用c++语言实现

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:36
  • 阅读量:70
  • 阅读量:88
  • 阅读量:187
  • 阅读量:134
  • 猜你喜欢