排序——希尔排序
来源:互联网 发布:平面设计软件知乎 编辑:程序博客网 时间:2024/06/06 02:33
尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
希尔排序是不稳定排序。
基本思想
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量 =1( < …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
示例:
有一个序列:4、9、7、1、3、8、2、0
取增量为序列长度的一半即4,将序列分为4个子序列A,B,C,D;如图
将四个子序列分别排序,后序列如下
3、8、2、0、4、9、7、1
再取增量为4的一半即2,将序列分为两个子序列A,B
将两个子序列分别排序后序列
2、0、3、1、4、8、7、9
再取增量为2的一半即1,将整个序列进行一次排序的到最终排序结果
0、1、2、3、4、7、8、9
Java代码实现:
public static void shellSort(int[] data) { //len 为数组长度 int len = data.length; //g增量 初始增量为数组长度的一半 for(int g = len/2;g>0;g/=2) { for(int i=g;i<len;i++){ //临时保存当前的值 int tmp =data[i]; int j = i-g; //如果当前值小 则和所在序列中前面的所有值进行比较,最总确定当前值在序列中的正确位置 while(j>=0&&data[j] > tmp) { data[j+g]=data[j]; j-=g; } data[j+g]=tmp; } } }
0 0
- 排序—希尔排序
- 排序—希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 内部排序—希尔排序
- 插入排序—希尔排序
- 数据结构—希尔排序
- 数据结构 — 希尔排序
- 算法排序———希尔排序
- 排序算法——希尔排序
- 插入排序——希尔排序
- 经典算法排序——希尔排序
- 排序算法4——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- performSelector 那点事
- GreenDao的简单使用说明(五)多表n:m
- C#中的排序
- tableviewcell 2级折叠
- 多线程游戏服务器开发(2)-编写网络库
- 排序——希尔排序
- private public protected slots的区别
- Dynamics CRM 导出系统中实体的属性字段到EXCEL
- 查看系统版本信息
- Newtonsoft.Json序列化字符串-格式化和时间格式问题
- 接口的意义
- Quartz 框架快速入门(四)
- 西蒙iphone-OpenGL ES 教程-04 : 颜色及纹理
- 安卓开发中遇到测试TextView测量宽高