赞
踩
希尔排序(Shells Sort):又称缩小量排序。
1、算法基本思想:
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
希尔排序相当于将待排序的记录进行分组,对每一个组进行直接插入排序,然后将每个组组成的全体再次进行直接插入排序。
2、算法操作方法:
3、希尔排序算法实现:
- public class ShellSort {
- //核心代码---开始
- public static void sort(Comparable[] arr) {
- int j;
- for (int gap = arr.length / 2; gap > 0; gap /= 2) {
- for (int i = gap; i < arr.length; i++) {
- Comparable tmp = arr[i];
- for (j = i; j >= gap && tmp.compareTo(arr[j - gap]) < 0; j -= gap) {
- arr[j] = arr[j - gap];
- }
- arr[j] = tmp;
- }
- }
- }
- //核心代码---结束
- public static void main(String[] args) {
-
- int N = 2000;
- Integer[] arr = SortTestHelper.generateRandomArray(N, 0, 10);
- ShellSort.sort(arr);
- for( int i = 0 ; i < arr.length ; i ++ ){
- System.out.print(arr[i]);
- System.out.print(' ');
- }
- }
- }

4、希尔排序过程描述:
希尔排序初始增量的确定一般为数据总长度除以2.
5、希尔排序性能分析:
希尔排序的时间复杂度一般为:
注:希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。
6、排序稳定性介绍:
直接插入排序是稳定的;而希尔排序是不稳定的。
直接插入排序更适合于原始记录基本有序的集合。
希尔排序的比较次数和移动次数都要比直接插入排序少,当N越大时,效果越明显。
希尔排序的比较次数和移动次数都要比直接插入排序少,当N越大时,效果越明显。
直接插入排序也适用于链式存储结构;希尔排序不适用于链式结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。