数据结构排序之希尔排序

希尔排序(shellsort)的名称源于它的发明者Donald Shell,该算法是冲破二次时间界的第一批算法之一。希尔排序也叫做缩减增量排序

package sort;
/*
        希尔排序的名称源于它的发明者Donald Shell,该算法是冲破二次时间的一批算法之一。

        希尔排序中使用的一个序列叫增量序列(increment sequence).只要h1 = 1, 任何增量序列都是可行的。

        原始数组    81 94 11 96 12 35 17 95 28 58 41 75 15
        5排序后    35 17 11 28 12 41 75 15 96 58 81 94 95
        3排序后    28 12 11 35 15 41 58 17 94 75 81 96 95
        1排序后    11 12 15 17 28 35 41 58 75 81 94 95 96

        时间复杂度:希尔排序的时间复杂度最坏的情况下为o(N2)
 */
public class ShellSort {

    public static<AnyType extends Comparable<? super AnyType>> void shellSort(AnyType[] a){
        int j;

        for(int gap = a.length / 2; gap > 0; gap /= 2)  //每次缩小一半
            for(int i = gap; i < a.length; i++){
                AnyType tmp = a[i];
                for(j = i; j >= gap && tmp.compareTo(a[j - gap]) < 0; j -= gap)//j >= gap是起到了一个哨兵的作用
                    a[j] = a[j - gap];//如果说他前面一个的值比他后面一个的值要打,那么交换
                a[j] = tmp;//这里是当j -= gap;做完之后再来交换值,其实这一句话等同于再上一层的for循环里面来交换
            }
    }

    public static void main(String[] args) {
        Integer[] a = new Integer[]{81, 94, 11, 96, 12, 35, 17, 95, 28, 58, 41, 75, 15};
        shellSort(a);
        for(Integer number : a)
            System.out.print(number + ",");
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值