排序算法之希尔排序

  

      希尔排序:

             设待排序数组seqlist

              1.取增量d = seqlist.lenth/2,(可以随机取,d<seqlist.lenth)

              2.对将步长为d的元素为一组进行插入排序

              3.d = d/2;

              4.d == 0 ,结束算法

    程序:

 

   

package com.yamino.shellsort;

public class shellsort {
  
 
 
 private int[] mseqlist;
 private int d;//增量
 
     public shellsort()
     {
    
      setSeqlist(10);
       
        d= (mseqlist.length-1)/2; 
        while(d > 0)
        {
         fun_shellsot();
         d=d/2;
        }
                  
       
     }
     //插入排序
     //一趟排序
     private void fun_shellsot()
     {
        int i,j,n;
         n =mseqlist.length ;
       
        for(i = d+1 ;i< n;i++)
        {
         if(mseqlist[i] <mseqlist[i-d])
         {
               mseqlist[0]=mseqlist[i];
               j =  i-d;
               do
               {
                mseqlist[j+d] = mseqlist[j];
                 j=j-d;
               }while(j>0 && mseqlist[0]<mseqlist[j]);
          mseqlist[j+d] = mseqlist[0];
         }
        
        }
       
      
     }
     public void setSeqlist(int lenth)
     {
      mseqlist = new int[lenth];
      for(int i = 0 ;i< lenth;i++)
      {
       mseqlist[i] =lenth - i;
      }
      
     }
     public int[] getSeqlist()
     {
      return mseqlist;
     }
    
     public static void main(String[] args){
          
       int[] temp;
       shellsort msort = new shellsort();
      
       temp =msort.getSeqlist();
      
      for(int i = 1 ;i < 10; i++)
      {
       System.out.print(temp[i]  );
      }
      
     }
    

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值