数据算法之希尔排序(shellSort)的Java实现

  本文的代码来自于《数据结构与算法(JAVA语言版)》,是笔者在网上找到的资料,非正式出刊版物。笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论。
  希尔排序的基本思想是先把数组分成若干个小数组,然后对小数组进行排序,最后再整体排序。
  如图所示
希尔排序


Java具体实现代码:
输入:数据元素数组r,数组r 的待排序区间[low..high],步长序列delta
输出:数组r 以关键字有序
代码:

public void shellSort(Object[] r, int low, int high, int[] delta){
    for (int k=0;k<delta.length;k++)
        shellInsert(r, low, high, delta[k]); //一趟步长为delta[k]的直接插入排序
}
private void shellInsert(Object[] r, int low, int high, int deltaK){
    for (int i=low+deltaK; i<=high; i++)
        if (strategy.compare(r[i],r[i-deltaK])<0){ //小于时,需将r[i] 插入有序表
            Object temp = r[i];
            int j = i-deltaK;
            for(; j>=low&&strategy.compare(temp,r[j])<0; j=j-deltaK)
                r[j+deltaK] = r[j]; //记录后移
            r[j+deltaK] = temp; //插入到正确位置
        }
}

转载于:https://my.oschina.net/u/3473376/blog/895242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值