希尔排序

希尔排序是一种改进的插入排序算法,它通过将原始数据分成多个子序列来改善插入排序的性能,每个子序列的元素间隔为 d(增量)。随着算法的进行,d 逐渐减小,最终减为 1,此时整个序列就被排序好了。

c++代码:

cpp 复制代码
// 希尔排序函数
void shell_sort(std::vector<int>& nums) {
    int temp = 0;
    int n = nums.size();
    // 初始增量为数组长度的一半,逐步缩小增量
    for (int d = n / 2; d >= 1; d /= 2) {
        // 对每个子序列进行插入排序,sub_start表示每个子序列的首元素索引
        for (int sub_start = 0; sub_start < d; sub_start++) {
            // 对当前子序列进行插入排序
            for (int i = sub_start + d; i < n; i += d) {
                if (nums[i] < nums[i - d]) {
                    temp = nums[i];
                    int j;
                    // 移动元素,找到插入位置
                    for (j = i - d; j >= 0 && nums[j] > temp; j -= d) {
                        nums[j + d] = nums[j];
                    }
                    // 插入元素
                    nums[j + d] = temp;
                }
            }
        }
    }
}

c语言代码:

cpp 复制代码
// 希尔排序函数
void shell_sort(int nums[],int n) {
    int temp = 0;
    // 初始增量为数组长度的一半,逐步缩小增量
    for (int d = n / 2; d >= 1; d /= 2) {
        // 对每个子序列进行插入排序,sub_start表示每个子序列的首元素索引
        for (int sub_start = 0; sub_start < d; sub_start++) {
            // 对当前子序列进行插入排序
            for (int i = sub_start + d; i < n; i += d) {
                if (nums[i] < nums[i - d]) {
                    temp = nums[i];
                    int j;
                    // 移动元素,找到插入位置
                    for (j = i - d; j >= 0 && nums[j] > temp; j -= d) {
                        nums[j + d] = nums[j];
                    }
                    // 插入元素
                    nums[j + d] = temp;
                }
            }
        }
    }
}

总结

|-------|----------------|
| 时间复杂度 | 未知,但优于直接插入排序 |
| 空间复杂度 | O(1) |
| 稳定性 | 不稳定 |
| 适用性 | 只可用于顺序表,不可用于链表 |
[希尔排序性质]

相关推荐
luj_176819 小时前
R语言生态优势与学习曲线分析
c语言·开发语言·网络·经验分享·算法
计算机安禾19 小时前
【算法分析与设计】第36篇:计算几何基础:凸包问题的分治与扫描线解法
大数据·人工智能·算法·机器学习·剪枝
货拉拉技术19 小时前
飞速发展的计算机视觉
人工智能·算法
如竟没有火炬19 小时前
寻找峰值——二分
java·开发语言·数据结构·python·算法·散列表
noipp20 小时前
推荐题目:洛谷 P1115 最大子段和
算法
Lumbrologist20 小时前
【C++】零基础入门 · 第 17 节:多线程编程基础
java·c++·算法
轻闲一号机20 小时前
【语音】笔记
前端·笔记·算法
aWty_20 小时前
实分析入门(12)--可测函数
学习·数学·算法·实变函数
海砥装备HardAus20 小时前
无人机姿态解算中「重力矢量观测退化」机理与动态补偿技术
算法·无人机·飞控
广州灵眸科技有限公司20 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发套件组装上电
网络·数据库·人工智能·算法·飞书