[算法] shell sort
2015-09-03 10:34
483 查看
public void sort(int[] list) { int gap = list.length / 2; while (1 <= gap) { for (int i = gap; i < list.length; i++) { int j = 0; int temp = list[i]; for (j = i - gap; j >= 0 && temp < list[j]; j = j - gap) { list[j + gap] = list[j]; } list[j + gap] = temp; } gap = gap / 2; } }
shell sort,希尔排序,缩小增量排序是对插入排序的改进。
首先将待排序数据按照一定的步长gap分为多个组,针对每个组进行直接插入排序,然后缩小步长,进行上面同样的过程。
上面的程序在许多地方出现,我就原封不多呢拷过来了,包括下面的引用 [1] 当中。
为什么说是针对每个分组的插入排序?
外层 for针对每一个分组的终点,显然每一个终点只能属于一个分组。内层for当然就是对这个分组进行插入排序了
假设gap=3
下面的数字是数组当中的下标
0 1 2 3 4 5 6 7 8 9 10
这里 0 3 6 9是一个分组;2,4,7,10是一个分组;2,5,8是一个分组
首先从3开始 比较0,3
然后4,比较1,4
然后5,比较2,5
然后6,比较0,3,6 这里可以看到0,3在前面已经比较过了,所以这里只需要寻找6的插入位置即可。
然后7,比较1,4,7 这里的1,4已经比较过了,所以这里只需要寻找7的插入位置即可
然后8,比较2,5,8 这里的2,5已经比较过了,所以只需寻找8的插入位置即可
然后9,比较0,3,6,9这里0,3,6已经比较过了,所以只需寻找9的插入位置即可
然后10,比较1,4,7,10 这里1,4,7已经比较过了,所以只需寻找10的插入位置即可
[1] /article/5061543.html
相关文章推荐
- Use Windows PowerShell cmdlets to manage sites in SharePoint 2013
- python 调用Linux shell
- linux——shell流程控制
- shell与if相关参数
- Shell字符串比较相等、不相等方法小结
- shell判断文件,目录是否存在或者具有权限
- android studio mac :-bash: gradlew: command not found
- Shell中的&&、 ||、 ()和 {}
- Hadoop FS Shell命令大全
- head命令
- sort命令
- xxd命令
- dumpe2fs命令
- ulimit命令
- ls命令
- linux下shell显示-bash-4.1#不显示路径解决方法
- Linux主要shell命令详解
- 使用shell判断路径或文件是否存在
- JMeter学习-015-JMeter 断言之-Bean Shell Assertion
- 类shell程序的简化实现