排序-希尔-Java

希尔是在插入排序的基础上实现的。插入的话不是像扑克牌那样的插入嘛,i与i-1进行比较~~~
希尔则是将其步从1换成h

因为插入排序是如果是几本有序的那么就快,或者是小的数据会快。
那么将其变成h,原来是1是步长,每次与之比较的位置是i+h 原来的插入是i+1去比较
利用h比较一次,变得对于h来说是相对有序的,减小h,再次执行,直到h=1。也就是最后一次的插入排序

http://blog.csdn.net/jianyuerensheng/article/details/51258460
这个图看一下就明白了

这里写图片描述

package sorts;

import object.Example;

public class xier extends Example {

     public static void sort(Comparable[] a){
          int N =a.length;
          int h = 1;
          while(h<N/3){h=3*h+1;}
          System.out.println(h);
          while(h>=1){
              for (int i=h;i<N;i++){
                   for(int j=i;j>=h&&less(a[j], a[j-h]);j-=h){
                        exch(a, j, j-h);
                   }
              }
              h=h/3;

          }

     }

          public static void main(String[] a){
              Comparable[] ac = new Comparable[]{3,2,4,1,5,1,6,4,3,7,9,0,8,7,9,3,2};

              sort(ac);
              show(ac);

          }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值