十大经典排序算法系列博客——>传送门


希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素。

  • 算法步骤:

    • 选择一个增量序列T1,T2,…,Tk, 其中Ti>Tj,Tk=1, i>j;
    • 每趟排序,根据对应的增量Ti,将待排序列分割成若干子序列,分别对各子序列进行直接插入排序;
    • 按增量序列个数k,对序列进行k趟排序。
  • 希尔排序实例:
    下图的增量序列为:5,2,1,第一趟排序将增量为5的子序列进行插入排序,第二趟排序将增量为2的子序列进行插入排序,第三趟将增量为1的子序列进行插入排序,最终完成排序

代码实现

#include <iostream>using namespace std;int a[] = {70,30,40,10,80,20,90,100,75,60,45};void shell_sort(int a[],int n);
int main()
{cout<<"Before Sort: ";for(int i=0; i<11; i++)cout<<a[i]<<" ";cout<<endl;shell_sort(a, 11);cout<<"After Sort: ";for(int i=0; i<11; i++)cout<<a[i]<<" ";cout<<endl;system("pause");
}void shell_sort(int a[], int n)
{int gap;for(gap = 3; gap >0; gap--){for(int i=0; i<gap; i++){for(int j = i+gap; j<n; j=j+gap){if(a[j]<a[j-gap]){int temp = a[j];int k = j-gap;while(k>=0&&a[k]>temp){a[k+gap] = a[k];k = k-gap;}a[k+gap] = temp;}}}}
}

【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四相关推荐

  1. 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十

    十大经典排序算法系列博客-->传送门 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最 ...

  2. 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七

    十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...

  3. 【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六

    十大经典排序算法系列博客-->传送门 ##### 1.快排的实现逻辑: 先从数列中取出一个数作为基准数(通常取第一个数). 遍历序列,将比它小的数与比它大的数分别记录下来,分为两类,最后该数放在 ...

  4. 【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五

    十大经典排序算法系列博客-->传送门 简介:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,是采用分治法Divide and Conquer的一个非常典型的应用.分Divide: ...

  5. 【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三

    十大经典排序算法系列博客-->传送门 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤: 从第一个元素开始,该元素认为已经被排序: ...

  6. 【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一

    十大经典排序算法系列博客-->传送门 冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换.重复地进行遍历直到没有再需要交换时表示数列已经排序完成. 算法步骤: ...

  7. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  8. 【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八

    十大经典排序算法系列博客-->传送门 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确 ...

  9. 【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二

    十大经典排序算法系列博客-->传送门 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的 ...

最新文章

  1. 冬奥会夺金的背后杀手锏,竟是位 AI 虚拟教练
  2. Apache commons email 使用过程中遇到的问题
  3. android log时间,android – Logcat的日志时间戳不按顺序排列
  4. php如何导入大文件数据库,PHP读取CSV大文件导入数据库的示例
  5. python数据挖掘试题四十道,你敢来挑战吗?
  6. 登录状态保持Session/Cookie
  7. 打破冷漠僵局文章_研究僵局–第1部分
  8. 【渝粤教育】国家开放大学2018年春季 0062-21T港台文学专题讲座 参考试题
  9. 如何在Python中针对一个值检查多个变量?
  10. silverlight 3D 游戏开发
  11. [vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?
  12. Java虚拟机(JVM)面试题大集合
  13. 性能优化实战案例——助力某移动OA系统
  14. Fiddler-学习笔记-远程抓包
  15. 遗传算法工具箱约束优化例题
  16. 为什么要参加PMP考前培训?有什么好处?
  17. pdffactory字体打印不对_【原创】pdfFactory Pro有关转换PDG图像质量下降解决途径
  18. 计算机数学基础:斜率与截距、导数、权重的关系
  19. html5手机端页面缩放问题的解决
  20. Navicat premium 12 闪退问题(非有道词典问题)

热门文章

  1. python爬取糗事百科
  2. pprof 的原理与实现
  3. 2022校招百度提前批校园招聘
  4. OS--进程间通信详解(二)
  5. 【线上分享】音频多麦盲分技术
  6. LiveVideoStackCon 2019北京开幕 成为多媒体技术生态风向标
  7. RealNetworks创始人Rob Glaser:为什么我们在中国取得成功?
  8. GitHub超实用操作
  9. 腾讯云培训认证中心开放日
  10. 腾讯云助力中国信息通信研究院研发运维标准化体系建设