目录
- 希尔排序
 
- 什么是希尔排序?
 - 示例演示
 - 牛刀小试
 
希尔排序

什么是希尔排序?
希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。
 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。
简单的说,是先设置好一个长度(一般是元素长度的一半),然后将其划分为一组,先对这一组进行排序。然后缩小范围(一般是长度/2),在分组排序,直到长度变为1。
示例演示
声明:以下图片来自菜鸟教程
(1)初始增量第一趟 gap = length/2 = 4

(2)第二趟,增量缩小为 2

(3)第三趟,增量缩小为 1,得到最终排序结果

牛刀小试
对{7,6,9,3,1,5,2,4}进行排序
#include <iostream>
using namespace std;
int a[8]={7,6,9,3,1,5,2,4};
int gap;
int length = 8;
int temp;
int main()
{
int j;
for(gap = length/2;gap>0;gap/=2)
{
for(int i=gap;i<length;i++)
{
temp = a[i];
for(j = i;j>=gap&&temp<a[j-gap];j-=gap)
{
a[j] = a[j-gap];
}
a[j] = temp;
}
}
for(int i=0;i<length;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPopdGEB-1660705194988)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20220817105808982.png)] 经典算法之希尔排序_算法_05](https://file.cfanz.cn/uploads/png/2022/09/26/3/5WQF6J42EN.png)










