8 -- 插入排序之希尔排序
2015-05-29 11:37
246 查看
八、希尔排序
希尔排序,是递减增量排序算法,是插入排序的一种高速而稳定的改进版本。基于以下两点性质改进:
1)插入排序对几乎排好序的数据操作,效率高。即可达到线性排序的效率。
2)插入排序一般来说是低效的,因为每次只能将数据移动一位。
希尔算法把比较的元素分为几个区域来提升性能。让一个元素可以一次性的朝最终位置前进一大步,然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,待是到了这步,需排序的数据几乎是已经拍好的了。
假设有这样一组数据[13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10],开始以步长为5开始排序,分成5列,
13 14 94 33 82
25 59 94 65 23
45 27 73 25 39
10
然后对每列进行排序:
10 14 73 25 23
13 27 94 33 39
25 59 94 65 82
45
然后我们得到[10,14,73,25,23,13,27,94,33,39,25,59,94,65,82,45],然后再以3为步长进行排序:
10 14 73
25 23 13
27 94 33
39 25 59
94 65 82
45
排序之后变成:
10 14 13
25 23 33
27 25 59
39 65 73
45 94 82
94
最后以1位步长今昔给你排序,此时就是简单的插入排序了。
希尔排序,是递减增量排序算法,是插入排序的一种高速而稳定的改进版本。基于以下两点性质改进:
1)插入排序对几乎排好序的数据操作,效率高。即可达到线性排序的效率。
2)插入排序一般来说是低效的,因为每次只能将数据移动一位。
希尔算法把比较的元素分为几个区域来提升性能。让一个元素可以一次性的朝最终位置前进一大步,然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,待是到了这步,需排序的数据几乎是已经拍好的了。
假设有这样一组数据[13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10],开始以步长为5开始排序,分成5列,
13 14 94 33 82
25 59 94 65 23
45 27 73 25 39
10
然后对每列进行排序:
10 14 73 25 23
13 27 94 33 39
25 59 94 65 82
45
然后我们得到[10,14,73,25,23,13,27,94,33,39,25,59,94,65,82,45],然后再以3为步长进行排序:
10 14 73
25 23 13
27 94 33
39 25 59
94 65 82
45
排序之后变成:
10 14 13
25 23 33
27 25 59
39 65 73
45 94 82
94
最后以1位步长今昔给你排序,此时就是简单的插入排序了。
相关文章推荐
- 8 -- 插入排序之希尔排序
- 8 -- 插入排序之希尔排序
- 浅谈Lua的面向对象特性
- Adobe CC 2014 全系列 MAC/PC 完美破解激活教程
- Material Design 之 Divider设计规范
- 如何创建不可变(Immutable)的Java类或对象
- 正则表达式是什么?
- 第3章 6
- order by优化-mysql
- arcgis android 中shapefile的加载
- 使用objection来模块化开发iOS项目
- 分清字符、字符集、字符编码
- SqlServer studio Express相关
- 不定义JQuery插件,不要说会JQuery
- 8.2种方式,实现某DIV元素以50px每秒的速度左移100px。
- [剑指Offer] 滑动窗口的最大值
- 字符窜序列化serialize问题
- 学习资源整理
- JS验证用户名密码大全。
- 网站设计的小技巧分享