希尔排序

思想:

逐步分组进行粗调,最后进行插入排序。

分组的话一开始两个元素之间相隔的距离是总元素数量的一半,然后再变为1半,最后变为1,每一次都是使用插入排序来做的,我排两个元素和一个元素,总比排很多个元素要好。

 

 

代码:

 public static void sort(int[] nums) {
         int d = nums.length;
         while (d > 1) {
             d = d / 2;
             for (int i = 0; i < d; i++) { // 前面的四个数
                 for (int j = i + d; j < nums.length; j += d) { // 前面四个数一一对应的四个数
                     // 下面开始前后比较
                     int temp = nums[j];
                     int k ;
                     for (k = j - d; k >= 0 && nums[k] > temp; k -= d) {
                         nums[k + d] = nums[k]; // 前面的值赋给后面
                    }
                     // 最后k比插入位置少d
                     nums[k + d] = temp;
                }
            }
        }
    }

稳定性:不稳定

空间复杂度:O(1)

时间复杂度:平均是小于O (N^2) 的,看你的d是怎样选的,d选的好的话,可以降到O (n^3/2),或者O (n^4/3)

posted on   Love&Share  阅读(31)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2021-04-09 JDBC(重点)
2021-04-09 三大范式
2021-04-09 规范 数据库设计

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示