排序算法--希尔排序

希尔排序是插入排序的改进版本,适合中等规模数据排序,性能优于简单插入排序。

cpp 复制代码
// 希尔排序函数
void shellSort(int arr[], int n) {
    // 初始间隔(gap)为数组长度的一半,逐步缩小
    for (int gap = n / 2; gap > 0; gap /= 2) {
        // 对每个间隔进行插入排序
        for (int i = gap; i < n; i++) {
            int temp = arr[i]; // 当前需要插入的元素
            int j;

            // 将比 temp 大的元素向后移动
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp; // 插入 temp 到正确位置
        }
    }
}
cpp 复制代码
#include <stdio.h>
// 打印数组函数
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {12, 34, 54, 2, 3}; // 待排序数组
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

    printf("排序前的数组: \n");
    printArray(arr, n);

    shellSort(arr, n); // 调用希尔排序函数

    printf("排序后的数组: \n");
    printArray(arr, n);

    return 0;
}

优化建议

1.优化间隔序列:使用更高效的间隔序列(如 Hibbard 或 Sedgewick 序列)可以提升性能。

cpp 复制代码
void shellSortOptimized(int arr[], int n) {
    int gaps[] = {701, 301, 132, 57, 23, 10, 4, 1}; // Sedgewick 序列
    int gapsSize = sizeof(gaps) / sizeof(gaps[0]);

    for (int k = 0; k < gapsSize; k++) {
        int gap = gaps[k];
        for (int i = gap; i < n; i++) {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}

2.结合插入排序:当间隔缩小到 1 时,希尔排序退化为插入排序,适合小规模数据。

3.稳定性:希尔排序是不稳定的排序算法(相同元素的相对顺序可能改变)。

相关推荐
AI+程序员在路上35 分钟前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
2401_8318249636 分钟前
基于C++的区块链实现
开发语言·c++·算法
We་ct43 分钟前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
愣头不青1 小时前
238.除了自身以外数组的乘积
数据结构·算法
爱编码的小八嘎1 小时前
C语言完美演绎4-4
c语言
汉克老师1 小时前
GESP5级C++考试语法知识(六、链表(一)单链表)
c++·链表·单链表·快慢指针·进阶·gesp5级·gesp五级
人工智能AI酱1 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager1 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归
m0_518019481 小时前
C++与机器学习框架
开发语言·c++·算法
一段佳话^cyx1 小时前
详解逻辑回归(Logistic Regression):原理、推导、实现与实战
大数据·算法·机器学习·逻辑回归