欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java算法之希尔排序

程序员文章站 2024-02-23 09:51:28
...

基本思想
先将待排序的数组元素分成多个子数组,使得每个子数组的元素个数相对较少,然后对各个子数组分别进行直接插入排序,待整个待排数组“基本有序”后,最后在对所有元素进行一次直接插入排序。
代码

public class ShellSort {

    public static void shellSort(int[] arrays) {
        int temple;

        if (arrays == null || arrays.length <= 1) {
            return;
        }
        // 增量
        int incrementNum = arrays.length / 2;
        while (incrementNum >= 1) {
            for (int i = incrementNum; i < arrays.length; i++) {
                // 进行插入排序
                for (int j = i; j >= incrementNum; j = j - incrementNum) {
                    if (arrays[j] < arrays[j - incrementNum]) {
                        temple = arrays[j];
                        arrays[j] = arrays[j - incrementNum];
                        arrays[j - incrementNum] = temple;
                    }
                }
            }
            // 设置新的增量
            incrementNum = incrementNum / 2;
        }
    }

    public static void main(String[] args) {
        int[] a = new int[] { 49, 38, 65, 97, 76, 13, 27, 50 };
        shellSort(a);
        for (int i : a)
            System.out.print(i + " ");
    }
}

时间复杂度
O(n)——–最好
O(n^2)—–最坏
O(nlog2n)–平均