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

快速排序与希尔排序实战解析

一、今天学习目标

  1. 希尔排序(插入排序升级版)
  2. 快速排序(最常用、面试必考)
  3. 完整可运行代码
  4. 复杂度对比

二、希尔排序(Shell Sort)

思想:

  • 分组做插入排序
  • 逐步缩小增量(gap)
  • 最后 gap=1 时就是普通插入排序,但数组已经基本有序,非常快
// 希尔排序 void shellSort(int arr[], int n) { for (int gap = n / 2; gap > 0; gap /= 2) { 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; } } }

三、快速排序(Quick Sort)

思想:

  • 选一个基准 pivot
  • 小的放左边,大的放右边
  • 递归左右两部分

平均复杂度O(n log n),实际最快。

// 交换 void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } // 划分函数 int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return i + 1; } // 快排递归 void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } }

四、完整测试代码

#include <stdio.h> // swap、shellSort、quickSort、partition 都放这里 void printArr(int arr[], int n) { for (int i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr1[] = {9, 3, 7, 1, 5, 2, 8, 4, 6}; int n = sizeof(arr1) / sizeof(arr1[0]); printf("原数组:"); printArr(arr1, n); shellSort(arr1, n); printf("希尔排序后:"); printArr(arr1, n); int arr2[] = {9, 3, 7, 1, 5, 2, 8, 4, 6}; quickSort(arr2, 0, n - 1); printf("快速排序后:"); printArr(arr2, n); return 0; }

运行结果:

原数组:9 3 7 1 5 2 8 4 6 希尔排序后:1 2 3 4 5 6 7 8 9 快速排序后:1 2 3 4 5 6 7 8 9

五、复杂度对比

表格

算法时间复杂度稳定性
希尔O(n log n) ~ O(n²)不稳定
快排O (n log n) 平均不稳定

六、今日小练习

对数组{6, 1, 8, 3, 5, 2, 7, 4}分别使用希尔排序、快速排序并输出结果。

http://www.jsqmd.com/news/657268/

相关文章:

  • 智能代码生成从“能用”到“飞快”的临界点:基于Transformer Decoder注意力机制重构的4种轻量化生成策略(含可复现PyTorch代码片段)
  • 手机号查QQ号终极指南:3步快速查询完整教程
  • Zotero文献格式化插件终极指南:一键告别杂乱文献库的完整解决方案
  • DeepMosaics终极指南:3个简单步骤掌握AI智能马赛克处理技术
  • MinerU 系列教程 第十二课:公式识别 - LaTeX 的自动生成
  • AI编程工具使用详解
  • 一篇文章带你快速上手Vue3(包含vue核心语法、router路由、axios请求库、pinia状态管理、ts类型约束等等)
  • Excel公式美化器:终极免费工具,让复杂公式一目了然!
  • 【GitHub项目推荐--Agentic Design Patterns:AI Agent 架构设计的“中文版设计模式”】⭐⭐⭐⭐⭐
  • 如何快速将飞书文档转换为Markdown:终极解决方案指南
  • 中层已死,智能体在管你
  • MinerU 系列教程 第十三课:FastAPI 服务 - mineru-api 深度解析
  • 保姆级教程:在COMSOL中搞定压电晶体仿真,手把手教你设置旋转坐标系和欧拉角
  • Spotify广告拦截终极指南:BlockTheSpot如何让免费用户享受Premium体验?
  • 深入PCA9685数据手册:手把手教你用STM32的IIC调试其所有寄存器(附逻辑分析仪实测波形)
  • 10 分钟装好 Hermes,用 Profile 隔离你的“工作人格“和“生活人格“
  • Meta与博通续约至2029年,将推2纳米AI计算加速器,博通CEO转任顾问
  • Java大厂面试实录:互联网医疗场景下的核心技术栈问答解析
  • 终极指南:5分钟免费解锁Cursor AI Pro完整功能的完整解决方案
  • 从非结构化文档到智能知识图谱:llm-graph-builder 如何重塑企业知识管理
  • 用STM32CubeMX和HAL库点亮WS2812:新手避坑RGB灯珠颜色错乱的5个关键步骤
  • 别再手动造数据了!用Modbus Slave模拟从站,5分钟搞定PLC通讯调试
  • SITS2026 AI邮件引擎深度拆解:5类高频场景模板+2步调试法,即刻生成高回复率商务邮件
  • 计算机算法的生命周期的庖丁解牛
  • 豆瓣9.1,麻省理工经典概率论神作!读者看完疾呼“请扔掉你们学校自己编的概统教材!”
  • 若依WMS仓库管理系统:现代化仓储管理的完整解决方案
  • Hyperf方案 微服务拆分策略与实践
  • 【GitHub项目推荐--LingBot-Map:流式 3D 重建的几何上下文 Transformer】⭐⭐⭐⭐⭐
  • CSAPP 3e实验环境构建实战:从虚拟机到WSL的完整指南
  • 【研报317】2026年中国汽车行业趋势分析报告:新能源、智能网联、组合辅助驾驶重塑出行