java 排序算法详细解读(4)
来源:互联网 发布:杭州市物联网数据 编辑:程序博客网 时间:2024/05/29 16:09
4. 希尔排序
希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。希尔排序的思想是将一个大的数组“分而治之”,划分为若干个小的数组,以 gap 来划分,比如数组 [1, 2, 3, 4, 5, 6, 7, 8] ,如果以 gap = 2 来划分,可以分为 [1, 3, 5, 7] 和 [2, 4, 6, 8] 两个数组(对应的,如 gap = 3 ,则划分的数组为: [1, 4, 7] 、 [2, 5, 8] 、 [3, 6] )然后分别对划分出来的数组进行插入排序,待各个子数组排序完毕之后再减小 gap 值重复进行之前的步骤,直至 gap = 1 ,即对整个数组进行插入排序,此时的数组已经基本上快排好序了,所以需要移动的元素会很小很小,解决了插入排序在处理大规模数组时较多移动次数的问题。
具体实例请参照插入排序。
希尔排序是插入排序的改进版,在数据量大的时候对效率的提升帮助很大,数据量小的时候建议直接使用插入排序就好了。
实现代码:
希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。希尔排序的思想是将一个大的数组“分而治之”,划分为若干个小的数组,以 gap 来划分,比如数组 [1, 2, 3, 4, 5, 6, 7, 8] ,如果以 gap = 2 来划分,可以分为 [1, 3, 5, 7] 和 [2, 4, 6, 8] 两个数组(对应的,如 gap = 3 ,则划分的数组为: [1, 4, 7] 、 [2, 5, 8] 、 [3, 6] )然后分别对划分出来的数组进行插入排序,待各个子数组排序完毕之后再减小 gap 值重复进行之前的步骤,直至 gap = 1 ,即对整个数组进行插入排序,此时的数组已经基本上快排好序了,所以需要移动的元素会很小很小,解决了插入排序在处理大规模数组时较多移动次数的问题。
具体实例请参照插入排序。
希尔排序是插入排序的改进版,在数据量大的时候对效率的提升帮助很大,数据量小的时候建议直接使用插入排序就好了。
实现代码:
复制内容到剪贴板
代码:
/**
* Shell Sorting
*/
SHELL(new Sortable() {
public <T extends Comparable<T>> void sort(T[] array, boolean ascend) {
int length = array.length;
int gap = 1;
// use the most next to length / 3 as the first gap
while (gap < length / 3) {
gap = gap * 3 + 1;
}
while (gap >= 1) {
for (int i = gap; i < length; i++) {
T next = array;
int j = i;
while (j >= gap) {
int compare = array[j - gap].compareTo(next);
// already find its position
if (compare == 0 || compare < 0 == ascend) {
break;
}
array[j] = array[j - gap];
j -= gap;
}
if (j != i) {
array[j] = next;
}
}
gap /= 3;
}
}
})
- java 排序算法详细解读(4)
- java 排序算法详细解读
- Java排序算法详细解读(1)
- Java排序算法详细解读(2)
- java排序算法详细解读(3)
- java 排序算法详细解读(5)
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- 详细解读Java中的快速排序
- 黑马程序员- Java实现的几个常用排序算法详细解读
- SHELLdorado学习笔记1 allfiles
- ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView
- java排序算法详细解读(3)
- C/C++内存对齐
- 记录跟踪日志【r.r2d】
- java 排序算法详细解读(4)
- java 排序算法详细解读(5)
- Java- 简单接触Applet
- TSR.Watermark.Image.v2.3.0.1.Multilingual.Incl.Keygen-BRD
- Mysql 正则表达式在中文支持中的BUG
- VB.NET关闭窗体时最小化(附带解决.NET程序导致XP无法关机重启的问题)
- java 排序算法详细解读
- Statement-Level Rollback Resumable Space Allocation【每日一译】--2012-11-05
- Linux 内核启动挂载android根文件系统过程分析