当前位置: 首页 > news >正文

排序算法--希尔排序

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

// 希尔排序函数
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 到正确位置}}
}
#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 序列)可以提升性能。

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.稳定性:希尔排序是不稳定的排序算法(相同元素的相对顺序可能改变)。

http://www.lryc.cn/news/531762.html

相关文章:

  • Java 2024年面试总结(持续更新)
  • TensorFlow是个啥玩意?
  • 不可信的搜索路径(CWE-426)
  • Linux——基础命令
  • 利用TensorFlow.js实现浏览器端机器学习:一个全面指南
  • 利用HTML和css技术编写学校官网页面
  • SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器
  • 笔记:新能源汽车零部件功率级测试怎么进行?
  • ES6中的map和原生的对象有什么区别?
  • 2502vim,vim文本对象中文文档
  • spring security与gateway结合进行网关鉴权和授权
  • LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控
  • log4j2日志配置文件
  • 用Deepseek做EXCLE文件对比
  • Tailwind CSS v4.0 升级与 Astro 5.2 项目迁移记录
  • TongSearch3.0.4.0安装和使用指引(by lqw)
  • 低代码产品表单渲染架构
  • windows 剪切板的写入、读取,包括图片,文本内容
  • Matplotlib 高级图表绘制与交互式可视化(mpld3)
  • (9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,
  • 专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义
  • 云端智慧:创业公司如何以全球视野选择最佳平台,实现业务新高度
  • 【工具变量】中国省级八批自由贸易试验区设立及自贸区设立数据(2024-2009年)
  • 猫眼Java开发面试题及参考答案(上)
  • WSL2中安装的ubuntu开启与关闭探讨
  • Linux抢占式内核:技术演进与源码解析
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.28 NumPy+Matplotlib:科学可视化的核心引擎
  • C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】
  • 【深度学习入门_机器学习理论】朴素贝叶斯(NaiveBayes)
  • docker pull Error response from daemon问题