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

时间:2024-10-13 18:57:31

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++语言实现
© 手抄报圈