排序算法之希尔排序(四)

希尔排序:希尔排序是插入排序的优化算法,算法思想:通过将全部元素分为几个区域来提升插入排序的性能。先将步长设为数组的一半,将分好的区域进行插入排序,之后步长gap每次等于他的一半,即gap /= 2。当步长为1时,就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了,插入速度快。

例如:数组  2,5,7,3,4,9,6,8,1,10

第一次gap=5  此时的分组如下,进行插入排序之后的数组       2,5,7,1,4,9,6,8,3,10

      排序算法之希尔排序(四)_第1张图片

第二次gap/=2    gap=2  此时的分组如下,进行插入排序之后的数组  1,4,3,2,5,7,6,8,9,10

排序算法之希尔排序(四)_第2张图片

第三次gap /=2  gap=1  此时的分组如下,进行插入排序之后的数组 1,2,3,4,5,6,7,8,9,10

排序算法之希尔排序(四)_第3张图片

此时排序完成,希尔算法的时间复杂度为  O(n^1.5)      空间复杂度为 O(1)  不具有稳定性。

代码如下:

public static > void shellSort(T[] arr){
        int n = arr.length;
        for (int gap=n/2;gap>0;gap/=2){
            for (int i=gap;i= 0 && (arr[j].compareTo(arr[j-gap]) < 0)){
                    swap(arr,j,j-gap);
                    j-=gap;
                }
            }
        }
    }

 

你可能感兴趣的:(java,数据结构与算法)