基本算法--希尔排序

基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

public class ShellSort {

    /**
     * 原理:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的
     * 下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,
     * 在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
     *
     * @author 阿信sxq-2015年7月16日
     *
     * @param args
     */
    public static void main(String[] args) {
        int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54,
                 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 };
        int d = a.length;
        int temp = 0;

        while (true) {
            d = d / 2;
            for (int x = 0; x < d; x++) {
                //对每一个组进行直接插入排序
                for (int i = x + d; i < a.length; i += d) {
                    int j = i - d;
                    temp = a[i];
                    for (; j >= 0 && temp < a[j]; j -= d) {
                        a[j + d] = a[j];
                    }
                    a[j + d] = temp;
                }
            }

            if (d == 1) {
                break;
            }
        }

        System.out.println(Arrays.toString(a));

    }

}


你可能感兴趣的:(希尔排序,基本排序)