排序之希尔排序

Posted youzoulalala

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之希尔排序相关的知识,希望对你有一定的参考价值。

package ShellSort;

import chooseSort.Example;

/**
 * 希尔排序
 * 思想:插入排序的变步长扩展版。以h..1为步长,将数组分为若干组,然后进行插入排序
 * 解决了插入排序交换次数过多的问题。
 */
public class ShellSort extends Example 

    @Override
    public void sort(Comparable[] a) 
        int h = 1;
        int n = a.length;
        while(h<n/3) h=h*3+1;  //h<n+1
        while(h>=1)  //遍历所有步长,最后一次步长为1
            //步长为h的插入排序
            for(int i=h;i<n;i++)
                for(int j=i;j>h-1&&less(a[j],a[j-h]);j-=h)
                    exch(a,j,j-h);
                
            
            h=h/3;
        
    

//    /**
//     * 测试用例
//     * @param args
//     */
//    public static void main(String[] args) 
//        Integer[] a = new Integer[]34,2,5,4,45,6,22;
//        ShellSort sort = new ShellSort();
//        sort.sort(a);
//        show(a);
//        System.out.println(isSorted(a));
//    

 

以上是关于排序之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之希尔排序

十大排序之希尔排序

高级排序算法之希尔排序

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

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

排序算法专题之希尔排序