shell排序(希尔排序)

shell排序(希尔排序)

步骤
– 将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1ge数据为一对
– 一次循环使每一个序列对排好顺序,
– 然后,再变为n/4个序列,再次排序。
– 不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。

代码


public class P4_4 {

    static final int SIZE = 10;

    public static void shellSort(int[] a){
        int i,j,h;
        int r,temp;
        int x=0;

        for (r = a.length/2;  r>=1 ; r/=2) {
            for (i = r; i < a.length ; i++) {
                temp = a[i];
                j=i-r;
                while (j>=0 && temp<a[j]){
                    a[r+j] = a[j];
                    j-=r;
                }
                a[j+r] = temp;
            }
            x++;
            System.out.println("第"+x+ "步排序为:");
            for (h = 0; h < a.length; h++) {
                System.out.print(" "+a[h]);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] shuzu = new int[SIZE];
        for (int i = 0; i < SIZE; i++) {
            shuzu[i] = (int)(100 + Math.random()*(100+1));
        }
        //
        System.out.println("排序前数组为:");
        for (int i = 0; i < shuzu.length; i++) {
            System.out.print(" "+ shuzu[i]);
        }
        //
        System.out.println();
        shellSort(shuzu);
        System.out.println("排序后数组为:");
        for (int i = 0; i < shuzu.length; i++) {
            System.out.print(" "+ shuzu[i]);
        }

    }
}

运行结果:

排序前数组为:
  169  159  130  165  132  103  181  138  196  1391步排序为:
  103  159  130  165  132  169  181  138  196  1392步排序为:
  103  138  130  139  132  159  181  165  196  1693步排序为:
  103  130  132  138  139  159  165  169  181  196
排序后数组为:
  103  130  132  138  139  159  165  169  181  196
Process finished with exit code 0
点赞