希尔(shell)排序
2017-11-26 19:41
225 查看
冒泡排序算法,选择排序算法和插入排序算法,虽然思路比较直观,但是排序的效率比较低。对于大量的数据需要排序时,往往需要寻求其他更为高效的排序算法。Shell排序算法便是其中一种。
第一次排序,首先将数组分为6/2=3个数字序列,第1个数据127和第4个数据101为一对,第2个数据118和第5个数据112为一对,第3个数据105和第6个数据100为一对。每一对数据进行排序后的数据101
112 100 127 118 105.
第二次排序,将数组分为6/4=1个序列(这里执行取整操作),此时逐个对数据比较,按照插入排序算法对该序列进行排序。排序后的数据为100
101 105 112 118 127
希尔排序算法严格来说基于排序的思想,其又称为希尔排序或者缩小增量排序。希尔排序算法的排序流程如下:
①将有n个元素的数组分成n/2个数字序列,第一个数据和第n/2+1个数据为一对,……….
②一次循环使每一个序列对拍好顺序。
③然后,再变为n/4个序列,再次排序。
④不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。
从上面的例子可以非常直观的了解到Shell排序算法的执行过程。插入排序时,如果原数据已经是基本有序的,则排序的效率就可以大大提高。另外,对于数量较小的序列使用直接插入排序,因需要移动的数据量较少,器效率也较高。因此,shell排序算法具有比较高的执行效率
第一次排序,首先将数组分为6/2=3个数字序列,第1个数据127和第4个数据101为一对,第2个数据118和第5个数据112为一对,第3个数据105和第6个数据100为一对。每一对数据进行排序后的数据101
112 100 127 118 105.
第二次排序,将数组分为6/4=1个序列(这里执行取整操作),此时逐个对数据比较,按照插入排序算法对该序列进行排序。排序后的数据为100
101 105 112 118 127
希尔排序算法严格来说基于排序的思想,其又称为希尔排序或者缩小增量排序。希尔排序算法的排序流程如下:
①将有n个元素的数组分成n/2个数字序列,第一个数据和第n/2+1个数据为一对,……….
②一次循环使每一个序列对拍好顺序。
③然后,再变为n/4个序列,再次排序。
④不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。
从上面的例子可以非常直观的了解到Shell排序算法的执行过程。插入排序时,如果原数据已经是基本有序的,则排序的效率就可以大大提高。另外,对于数量较小的序列使用直接插入排序,因需要移动的数据量较少,器效率也较高。因此,shell排序算法具有比较高的执行效率
package sort; public class Shell { public static void main(String[] args) { int[] arr = { 127, 118, 105, 101, 112, 100 }; for (int r = arr.length / 2; r >= 1; r /= 2) { // 划组排序 for (int i = r; i < arr.length; i++) { int temp = arr[i]; int j = i - r; while (j >= 0 && temp < arr[j]) { arr[j + r] = arr[j]; j -= r; } arr[j + r] = temp; } } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } }
相关文章推荐
- 希尔(Shell)排序的C++实现代码
- 排序(3)希尔(Donald L. Shell)排序
- Java 详解希尔(Shell)排序
- 希尔(shell)排序
- 插入排序和希尔(Shell)排序
- Shell(希尔)排序的分析和比较
- 希尔(Shell)排序
- 插入排序(直接插入排序和希尔(shell)排序
- 希尔(shell)排序-插入排序的扩展
- 【排序算法】直接插入排序与希尔(Shell)排序
- 排序(4)---------希尔(shell)排序(C语言实现)
- Shell(希尔)排序(java实现)
- Java 详解希尔(Shell)排序
- 排序算法大集锦_插入类——希尔(shell)排序
- 排序(4)---------希尔(shell)排序(C语言实现)
- 插入排序之希尔(shell)排序
- Java 详解希尔(Shell)排序
- shell(希尔)排序
- 希尔(shell)排序
- 希尔(shell)排序