希尔排序是一种插入排序法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。

基本思想

  不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。每次比较指定间距的两个数据项,若左边的值小于右边的值,则交换它们的位置。间距d按给定公式减少: di+1 =(di +1)/2 ,直到d等于1为止。D可以选取{9,5,3,2,1}。

算法步骤

  Step1 将n个元素个数列分为5个小组,在每个小组内按直接插入法排序;

  step2 在第i步,分组个数取 di+1 =(di +1)/2 {9,5,3,2,1};相临两组之间的对应元素进行比较,如果ai>aj,则交换它们的位置;

  Step3 当dK = 1的循环过程完成后,排序过程结束。

  希尔排序举例:设有字符数列"f d a c b e",执行Shell排序:

  SHELL排序算法的描述:

算法讨论

  Shell排序算法的时间复杂度分析比较复杂,实际所需的时间取决于各次排序时增量的个数和增量的取值。研究证明,若增量的取值比较合理,Shell排序算法的时间复杂度约为O(n(ldn)2)。由于Shell排序算法是按增量分组进行的排序,所以Shell排序算法是一种不稳定的排序算法。

代码

#include <iostream>
using namespace std;
void shell(int *work, int n) {int i, j, x, d;d = n / 2;while (d >= 1) {for (i = d + 1; i <= n; i++) {x = work[i];j = i - d;while ((j > 0) && (x < work[j])) {work[j + d] = work[j];j -= d;}work[j + d] = x;}d /= 2;}
}
int main() {int a[100], b, c, n, i;cout << "请输入需排序的数字个数:";cin >> n;cout << "请输入需排序的数字";for (i = 1; i <= n; i++) {cin >> a[i];}shell(a, n);cout << "从小到大排序结果为:";for (i = 1; i <= n; i++) {cout << a[i] << ' ';}system("pause");
}

希尔排序(附C语言实现)相关推荐

  1. 希尔排序及C语言实现

    排序系列之(4)希尔排序及C语言实现 收藏 希尔排序(Shell Sort)也称为递减增量排序算法,是插入排序的一种高速而安定的改良版.因希尔(Donald L. Shell)于1959年提出而得名. ...

  2. 希尔排序----附图解(C语言)

    目录 一.简介 二.代码部分 2.1完整代码 2.2代码输出结果 三.代码部分分析 3.1核心代码 3.2代码运行部分的过程(附图解) 四.总结 一.简介 中文名:希尔排序 英文名:Shell's S ...

  3. C++实现希尔排序(附完整源码)

    C++实现希尔排序 希尔排序(Shell's Sort) 希尔排序源代码 希尔排序(Shell's Sort) 插入排序的一种又称"缩小增量排序"(Diminishing Incr ...

  4. C:希尔排序(C语言)

    #include <stdio.h> #define N 10 void Shell_Sort(int *a, int n);int main(int argc, char** argv) ...

  5. python算法与数据结构-希尔排序算法(35)

    阅读目录 一.希尔排序的介绍 二.希尔排序的原理 三.希尔排序的图解 四.希尔排序的python代码实现 五.希尔排序的C语言实现 六.希尔排序的时间复杂度 七.希尔排序的稳定性 一.希尔排序的介绍 ...

  6. C语言实现希尔排序shell sort算法之一(附完整源码)

    希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...

  7. C语言实现希尔排序shell sort算法之二(附完整源码)

    希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...

  8. 希尔排序(Shell's Sort)的C语言实现

    原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称"缩小增量排序"(Diminis ...

  9. C语言希尔排序(解析)

    C语言希尔排序(解析) 网上找的移动图:

最新文章

  1. 【错误记录】Flutter 应用运行卡在 Running Gradle task ‘assembleDebug‘... ( 配置阿里云 Maven 仓库镜像 )
  2. 1.2传值、引用、常量引用
  3. geometry-api-java 学习笔记(二)点 Point
  4. 线程同步机制:互斥量、信号量、读写锁、条件变量
  5. java treemap_Java TreeMap HigherKey()方法与示例
  6. tomcat-maven-plugin 2.0版本发布
  7. 【python小工具】vbb文件提取json
  8. 2018最新老男孩Linux架构师实战课程14期视频
  9. 超市条码扫描枪使用前如何进行参数设置
  10. 拼写的能力和重要性英语作文_拼写很重要吗? 我认为是的。
  11. 山东理工大学ACM平台题答案 1134 数列求和
  12. python中单引号的作用_python里的单引号和双引号的有什么作用
  13. 三苯基膦(TPP)负载碘化BODIPY光敏剂(BDPI)纳米颗粒(PBDPI-TPP)介绍
  14. Julia语法归纳总结
  15. 华为彩信显示尚未激活服务器,华为手机无法接收彩信提示要开通gprs
  16. 「罗马人的故事 III 胜者的迷思」读后感 Part1,格拉古兄弟
  17. 免费H5页面制作工具大汇总
  18. 1503 Problem A 最简分式
  19. Java 代码实现 Liquibase 的基本使用方法
  20. 自动化篇 - 为闲鱼制作一个客服机器人

热门文章

  1. pandas 学习汇总10 - 统计:窗口函数rolling,expanding( tcy)
  2. 文献解读:纽约市废水系统宏病毒组初探
  3. Linux之xinetd安装及实践
  4. OpenCore 版本升级后清除NVRAM
  5. 五子棋-进阶版:C#窗体编写
  6. BVT BAT (版本验证测试和版本验收测试)
  7. 文本分析论文基本方法论
  8. 值得你收藏的办公技巧:word和execl使用技巧
  9. 3ds max 软件主菜单中添加新的菜单
  10. android 脚本模拟点击屏幕