排序算法四:希尔排序

基于插入排序的改进版,效率更高 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率

思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

在这里插入图片描述
平均时间复杂度:O( n1.3 ),空间复杂度:1,不稳

分组间隔一般取数组长度的1/2,然后再一直折半,在工程中一般就选取折半的方式来选取分组间隔

public class shell {
    public void shell(){
        int[] arry3={23,3,7,87,43,678,76,6,8,75,353,12,54,743,23,567,21};
        for(int gap=arry3.length/2;gap>0;gap/=2) {                   //将数组等比例缩小分组
            for (int j = gap; j < arry3.length; j++) {               //数组分组个数
                for (int i = j; i > gap - 1; i -= gap) {             //每个分组间进行插排排序
                    if (arry3[i] < arry3[i - gap]) {
                        int temp = arry3[i];
                        arry3[i] = arry3[i - gap];
                        arry3[i - gap] = temp;
                    }
                }
            }
        }
        for (int i=0;i<arry3.length;i++){
            System.out.print(arry3[i]+" ");
        }

    }
}

输出:

3 6 7 8 12 21 23 23 43 54 75 76 87 353 567 678 743

发布了18 篇原创文章 · 获赞 43 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42194695/article/details/104564983