希尔排序(java实现)

希尔排序基于插入排序,比选择排序和插入排序这种复杂度为0(n^2)的效率快,比快速排序和其他排序复杂度为(n*logN)的慢,但非常容易实现,代码既短又简单,希尔排序在最坏情况和在平均情况下执行效率相差不大。

希尔排序用java实现

package sort;

import java.util.Random;

/**
 * 希尔排序
 * @author 灰太狼
 *
 */

class ArraySh
{
    private long[] theArray;
    private int nElems;//数组元素个数
    
    public ArraySh(int max) {
        theArray=new long[max];
        nElems=0;
    }
    
    //插入数据
    public void insert(long value) {
        theArray[nElems]=value;
        nElems++;
    }
    
    public void display() {
        System.out.print("arr=");
        for(int i=0;i<theArray.length;i++) {
            System.out.print(theArray[i]+" ");
        }
        System.out.println();
    }
    
    //排序
    public void sort() {
        int inner,outer;
        long temp;
        int h=1;//增量间隔
        while(h<=nElems/3) {
            h=h*3+1;//生成间隔序列(1,4,13,40,121,...)
        }
        //h=4
        //间隔不断减少,直至间隔为1
        while(h>0) {
            for(outer=h;outer<nElems;outer++) {
                
                temp=theArray[outer];
                inner=outer;
                //以4为增量间隔,子排序区间为(0,4,8),(1,5,9)(2,6)(3,7)
                while(inner>h-1&&theArray[inner-h]>=temp) {
                    
                    theArray[inner]=theArray[inner-h];
                    inner-=h;
                }
                theArray[inner]=temp;
                
            }
            h=(h-1)/3;
        }
        
    }
    
}
public class ShellSort {
    
    public static void main(String []args) {
        int maxSize=10;//数组大小
        ArraySh arr=new ArraySh(maxSize);
        Random r=new Random();
        
        for(int j=0;j<maxSize;j++) {
            long n=r.nextInt(100);
            arr.insert(n);
        }
        arr.display();
        arr.sort();
        arr.display();
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰太狼_cxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值