Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

希尔排序算法

来源: n52376531 分享至:

插入排序弱点:如果插入数值很小要交换很多次数

希尔排序算法是根据插入排序改编的

希尔排序算法优化了插入排序 

希尔排序核心思想:希尔排序通过加大插入排序之间的间隔,并对这些数据进行插入排序,当完成间隔排序后,希尔排序减少间隔再进行间隔排序。一次进行下去

间隔计算公式 h=h*3+1

间隔减少公式 h=(h-1)/3

 -------------------------------------------------------------------------------

代码实现

public static void sort(long[] arr){
  int h=1;
  //计算插入排序间隔
  while(h<arr.length/3){
   h=h*3+1;
  }
  //当间隔大于0时
  while(h>0){
   //定义中间变量保存要插入的数值
   long temp;
   //插入排序      类似插入排序 间隔改为H
   for (int i = h; i < arr.length; i+=h) {
    temp=arr[i];
    int j=i;
    while(j>h-1&&arr[j-h]>=temp){
     arr[j]=arr[j-h];
     j-=h;
    }
    arr[j]=temp;
   }
   //减少插入排序间隔
   h=(h-1)/3;
  }
 }


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史