0
点赞
收藏
分享

微信扫一扫

经典算法之希尔排序



目录

  • ​​希尔排序​​
  • ​​什么是希尔排序?​​
  • ​​示例演示​​
  • ​​牛刀小试​​

希尔排序

经典算法之希尔排序_希尔排序

什么是希尔排序?

希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。

简单的说,是先设置好一个长度(一般是元素长度的一半),然后将其划分为一组,先对这一组进行排序。然后缩小范围(一般是长度/2),在分组排序,直到长度变为1。

示例演示

声明:以下图片来自菜鸟教程

(1)初始增量第一趟 gap = length/2 = 4

经典算法之希尔排序_数据结构_02

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

经典算法之希尔排序_希尔排序_03

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

经典算法之希尔排序_数据结构_04

牛刀小试

对{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;
}

结果:

经典算法之希尔排序_算法_05

举报

相关推荐

0 条评论