数据结构:希尔排序(shell sort)

 希尔排序-----交换法

import java.util.Arrays;

public class ShellSort {
    public static void main(String[] args) {
        int num = 10;
        int[] arr = new int[num];

        for (int i = 0; i < num; i++) {
            arr[i] = (int)(Math.random()*10000);
        }
        System.out.println(Arrays.toString(arr));
//        for (int i = 0; i < 10; i++) {
//            System.out.println(arr[i]);
//        }

        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    private static void shellSort(int[] arr){
        int tmp;

        // i是步长
        for (int i = arr.length/2; i>=1; i/=2) {
            for (int j = i; j < arr.length; j++) {
                for (int k = j; k-i >=0 ; k-=i) {
                    if(arr[k] < arr[k-i]){
                        tmp = arr[k];
                        arr[k] = arr[k-i];
                        arr[k-i] = tmp;
                        //break;
                    }
                }
            }
        }
    }
}

希尔排序-----位移法(效率会更高)

import java.util.Arrays;

public class ShellSort {
    public static void main(String[] args) {
        int num = 80000;
        int[] arr = new int[num];

        long begin = System.currentTimeMillis();
        System.out.println(begin);
        for (int i = 0; i < num; i++) {
            arr[i] = (int)(Math.random()*10000);
        }
       
        //System.out.println(Arrays.toString(arr));


        //shellSort(arr);
        shellSort2(arr);
        long end = System.currentTimeMillis();
        System.out.println(end);
        System.out.println(end-begin);
        //System.out.println(Arrays.toString(arr));
    }

    private static void shellSort2(int[] arr){
        int tmp;
        for (int i = arr.length/2; i >= 1 ; i/=2) {
            for (int j = i; j < arr.length; j++) {
                tmp = arr[j];
                int k = j;
                while(k-i >=0 && tmp < arr[k-i]){
                    arr[k] = arr[k-i];
                    k = k-i;
                }
                if(k != j){
                    arr[k] = tmp;
                }
            }
            //System.out.println("----- " + Arrays.toString(arr));
        }
    }

}
发布了557 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/103916710