插入排序与希尔排序 java

涉及到数组clone,随机数生成

 

public class ShellSort {
    public static void main(String[] args) {
        int[] arr = new int[10000];   //需要指定数组的长度
        //打印 1到10000之间的随机数
        int radom=0;
        for(int i=0;i<10000;i++){
            arr[i] = (int)(1+Math.random()*(10000+1));
        }
        int[] arr1 = arr.clone();//数组克隆


        long startTime = System.currentTimeMillis();//获取当前时间
//doSomeThing();   //要运行的java程序
        sort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("希尔排序程序运行时间:"+(endTime-startTime)+"ms");



        long startTime1 = System.currentTimeMillis();//获取当前时间
//doSomeThing();   //要运行的java程序
        sort1(arr1);
        long endTime1 = System.currentTimeMillis();
        System.out.println("普通插入排序程序运行时间:"+(endTime1-startTime1)+"ms");
    }

    /*希尔排序 针对有序序列在插入时采用交换法*/
    public static  void sort(int [] arr){
        //增量gap, 并逐渐缩小增量
        int j;
        for(int gap =arr.length/2;gap>0;gap/=2){

            for(int i=gap;i< arr.length;i++){
               int tmp=arr[i];
               for(j=i;j>=gap && tmp<arr[j-gap];j-=gap){
                   arr[j]=arr[j-gap];
               }
               arr[j]=tmp;

            }
        }
    }

    //插入排序
    public static  void sort1(int [] arr){
        int j;

            for(int i=1;i< arr.length;i++){
                int tmp=arr[i];
                for(j=i;j>=1 && tmp<arr[j-1];j-=1){
                    arr[j]=arr[j-1];
                }
                arr[j]=tmp;

            }
        }
}

希尔排序,当gap=1,称为插入排序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值