排序算法 --- 希尔排序
1 原理
希尔排序可以看作是对直接插入排序的优化. 直接插入是从前到后遍历数组, 每一个元素都往前移动到最合适的位置. 而希尔排序是利用间隔对数组进行分组, 然后再对每个小组进行子排序, 直到间隔为1.
2 具体步骤
首先要介绍一下间隔是什么.
间隔: 间隔是确定子分组的依据, 间隔是多少, 就有多少个子分组, 例如:
数组为: 7,3,2,5,8,1,6,9,0,4, 如果此时间隔为3, 那么如果两个数的间隔为三, 那么二者就为一组, 因为间隔多少就有多少组, 也就是说此时应该有三组, 其索引是:
- 0, 3, 6, 9
- 1, 4, 7
- 2, 5, 8
对应的元素为:
- 7, 5, 6, 4
- 3, 8, 9
- 2, 1, 0
了解了间隔之后, 下面就是希尔排序的具体步骤了(还是以上面的数组为例子).
1. 初始间隔为数组长度的一半(例子中数组长度为10, 初始间隔为5)
2. 把数组按照间隔进行分组, 组数为间隔大小(例中此时间隔为5, 那也就是第0, 5 一组, 1,6一组, 2, 7一组, 3, 8一组, 4, 9一组)
3. 对每个小组进行插入排序
4. 间隔除以2, 如果>0, 重复第二步.
代码:
vector<int> sortArray(vector<int>& nums) {int n = nums.size();int gap = n / 2;while (gap) {for (int i = 0; i < gap; i ++) {for (int cur_i = i + gap; cur_i < n; cur_i += gap) {for (int ii = cur_i; ii >= gap && nums[ii] < nums[ii - gap]; ii -= gap) {swap(nums[ii], nums[ii - gap]);}}}gap /= 2;}return nums;
}
排序算法 --- 希尔排序相关推荐
- 经典排序算法 - 希尔排序Shell sort
经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...
- python排序算法——希尔排序(附代码)
python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...
- 十大经典排序算法-希尔排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
希尔排序(Shellsort) 希尔排序是冲破二次时间屏障的第一批算法之一. 希尔排序通过比较相距一定间隔的元素来工作:各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.由 ...
- 排序算法——希尔排序(缩小增量排序)
1.希尔排序思想: 希尔排序就是把数据分成若干份子序列,从第一个元素开始,和每间隔为n的元素分成一个子序列,对每一份子序列实行直接插入排序,然后合并成一个新序列,继续对新序列以间隔m分成若干份,继续重 ...
- 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序
vs code ppt c++/java 目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的 ...
- 希尔排序是一种稳定的排序算法_排序算法—希尔排序
希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n ...
- ds排序--希尔排序_排序算法 - 希尔排序分析及优化
希尔排序 1 算法思想 希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本. 在插入排序中,如果待排序列中的某个元素,距离有序数列中待插入位置非常远,就需要比较很多次才可以到达插入位置,这是 ...
- 排序算法----希尔排序
1. 希尔排序:1959年Shell发明,第一个突破O(n^2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩小增量排序. 2. 希尔排序的 ...
- 排序算法——希尔排序
希尔排序是1959 年由D.L.Shell提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录&q ...
最新文章
- POJ1088(滑雪)
- ShapeMatching Using Fourier Descriptor
- python--12、索引知识
- 一次简单的服务器 cpu 占用率高的快速排查实战
- JQ基础练习---图片划过变暗
- java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示
- [Vue.js]实战 -- 电商项目(三)
- JavaWeb 后端 三 之 Response Request 学习笔记
- android 编程 输入矩阵,Android中Matrix的pre post set方法理解
- 【vue开发问题-解决方法】(一)在style中设置background-image时路径问题
- heapsort(Java)(最小堆)
- 多目标跟踪 综述(三)
- Python简单换脸程序
- 作为互联网+项目负责人的一些感悟
- ESC/POS常用打印指令面向对象封装,PHP处理二维码定位,微信小程序蓝牙打印
- rds的连接数_阿里云数据库RDS配置详解规格代码最大连接数IOPS
- Wechaty|微信小助手(非web|机器人)
- 转:宁愿在真实前颤抖,也不愿在催泪弹下哭泣(今何在)
- 学计算机用商用本,开学装机,笔记本电脑市场解析及购机推荐
- win10+Python3.7.3+OpenCV3.4.1入门学习(十二 图像轮廓)————12.4 Hu矩
热门文章
- python创建长度为n的数组_在Python中建立N维数组并赋初值
- 联想计算机不能进入系统桌面,联想电脑装系统,进不了PE桌面,怎么处理?
- mysql中的dump,从mysql中dump数据到本地
- 电脑fps低怎么办_电脑想要英雄联盟玩的流畅,主要看哪几个方面?
- 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
- python中def main是什么意思_关于python:为什么使用def main()?
- 埋点技术:“呵呵,你在网上的一举一动,都在我眼皮子底下”
- 【读书笔记】--- 《码出高效:java开发手册》
- 现代软件工程系列 学生读后感 梦断代码 DTSlob (1)
- java php html,java和html的区别是什么