关于shell排序算法的介绍参见:

​​​​​​图解排序算法(二)之希尔排序 - dreamcatcher-cx - 博客园

书中3.5节中关于shell排序的实现如下:

void shellsort(int v[], int n)
{int gap, i, j, temp;for(gap = n/2; gap > 0; gap /= 2)for(i = gap; i < n; i++)for(j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap){temp = v[j];v[j] = v[j + gap];v[j + gap] = temp;}
}

希尔排序是D.L.Shell于1959年发明的,其基本思想是:先比较距离远的元素,而不是像简单交换排序算法那样先比较相邻的元素。这样可以快速减少大量无序情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到减少为1,这时排序变成了相邻元素的互换。

该函数中包含一个三重嵌套的for语句。最外层的for语句控制两个被比较元素之间的距离,从n/2开始,逐步进行对折,直到距离为0.中间层的for循环语句用于在元素间移动位置。最内层的for语句用于比较各对相距gap个位置的元素,当这两个元素逆序时把它们互换过来。由于gap的值最终要递减到1,因此所有元素最终都会位于正确的排序位置上。

排序算法之shell排序相关推荐

  1. Java常见排序算法之Shell排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析

    希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...

  3. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  4. Java排序算法之——希尔排序

    算法简述 希尔排序也叫作shell排序或缩小增量排序,据说是一个叫D.L.Shell的人发明出来的,顾取名shell排序.这种排序是基于插入排序思想的,也比较适用于数据量大时. 我刚开始看到时候对于插 ...

  5. JAVA排序算法之希尔排序

    基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...

  6. c++ 二维数组 排序_【算法】排序算法之计数排序

    前几回,我们已经对[算法]排序算法之冒泡排序.[算法]排序算法之插入排序.[算法]排序算法之希尔排序.[算法]排序算法之选择排序.[算法]排序算法之快速排序.[算法]排序算法之归并排序.[算法]排序算 ...

  7. 排序算法之希尔排序(Java实现)

    希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...

  8. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

  9. 十大排序算法总结 内部排序

    目录 排序测试模板 一.冒泡排序 冒泡排序-总体思想 冒泡排序-编程思想 冒泡排序-复杂度及优缺点 冒泡排序-优化 二.选择排序 选择排序-总体思想 ​选择排序-编程思想 选择排序-复杂度及优缺点 三 ...

最新文章

  1. oracle sql判断相等,获取多行相等的人员(Oracle SQL)
  2. SAP ABAP SM50事务码和Hybris Commerce的线程管理器
  3. how is SAP OData count implemented in the backend
  4. plantuml 方法图_UML与软件建模:第四次作业(学习PlantUML活动图绘制方法)
  5. 用sed替换文件中的空格
  6. JSP转译成Servlet详细过程
  7. jq向php文件传json,jQuery向后台传入json格式数据的方法
  8. 场地测量的方法和程序_场地平整测量
  9. 简单常用的互联网赚钱工具分享
  10. (附源码)node.js基于vue框架潮牌官网设计与实现 毕业设计 010955
  11. List集合过滤不符合条件的数据
  12. SPSS学习(1)之数据录入与数据获取
  13. 无稳态多谐震荡器学习
  14. 一类用 LCT 维护信息的题目
  15. 腾达无线网卡驱动linux,在Ubuntu上安装腾达W541U V2.0 (RT2070)无线网卡驱动【使用2011新驱动】...
  16. Objective-C中强项和弱项之间的差异
  17. 电商ERP进销存系统V3多仓库带扫描php网页版B/S进销存系统多仓库版
  18. 李健清华计算机专业,李建-西南石油大学 - 计算机科学学院
  19. 计算机桌面输入法没有了怎么办,输入法不见了怎么办,小编教你电脑输入法不见了怎么办...
  20. 如何用python抠图和切换背景

热门文章

  1. linux调度周期systick怎么看,Cortex-M0系统滴答定时器Systick详解
  2. [52ABP实战系列] .NET CORE实战入门第三章更新了
  3. 【Linux】Linux下的gbd调试,你学废了吗
  4. 【转】软件工程研究领域最顶级的两个期刊
  5. 滑动拼图和文字点选两种类型的验证码
  6. 机器学习综述与“Hello World”实战
  7. 三菱四节传送带梯形图_四节传送带PLC控制
  8. 在万网注册的域名如何设置腾讯企业邮箱
  9. 如何去掉网页复制到word后的黑(或灰)背景色
  10. 高数计算机软件免费,Mathpix(学习高数辅助工具)V1.1 免费版