码迷,mamicode.com
首页 > 编程语言 > 详细

排序之希尔排序

时间:2019-06-20 15:48:32      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:err   ++   ring   iss   ide   pack   希尔   code   integer   

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));
//    }
}

 

排序之希尔排序

标签:err   ++   ring   iss   ide   pack   希尔   code   integer   

原文地址:https://www.cnblogs.com/youzoulalala/p/11058892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!