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

论快速排序的时间复杂度

*如有错误,请及时联系更正,感谢

这篇帖子是关于“快速排序的时间复杂度在最坏情况下是O(n^2),平均情况是O(n*log(n))"的原因

最坏情况

见下面代码

void quick_sort(int* a,int l,int r) { if(l>=r) { return ; } int left=l,right=r,key=left; while(left<right) { while(left<right&&a[right]>=a[key]) { right--; } while(left<right&&a[left]<=a[key]) { left++; } swap(a[left],a[right]); } swap(a[left],a[key]); key=left; quick_sort(a,l,key-1); quick_sort(a,key+1,r); }

当数据是单调递增时,由于右指针一直找不到比基准值小的数,所以会直接向左移动到1,
因此时间复杂度是O(n)。

又因为右指针会直接向左移动到1,所以左指针不动,这样key也不会变。

所以调用quick_sort(a,l,key-1);时,l是左边界,key-1是右边界,key-1 = l-1 < l,会直接返回。

而调用quick_sort(a,key+1,r); ,key+1是左边界,r是右边界,key+1 = l+1 < r(因为l<r)

而左边界会根据quick_sort(a,key+1,r);一直往右移动1个单位,得出时间复杂度递推式为
T(n)=T(n-1)+n(T(1)=1)算出T(n)=(n^2+n)/2,忽略常数项和低阶项,得出时间复杂度O(n^2)

平均情况

假设数据大小是2的次幂,左右指针相遇的位置是一定是正中心,因为左右指针一定会从左右边界经过所有区间。

因此时间复杂度是O(n)。得出时间复杂度递推式是T(n)=2T(n/2)+n(T(1)=1),其中2T(n/2)对应的是左右区间

反推:
T(1)=1,T(2)=2T(1)+2=2+2=4,T(4)=2T(2)+4=12,T(8)=2T(4)+8=32...

看出:
log(2)=1,log(4)=2,log(8)=3...

再看出:
T(2)=2*2,T(4)=4*3,T(8)=8*4...

得出T(n)=n*(log(n)+1),忽略常数项,得出时间复杂度O(n*log(n))

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

相关文章:

  • DAMOYOLO-S模型Linux生产环境部署:Ubuntu 20.04系统配置
  • MY9221 12通道LED驱动芯片原理与STM32嵌入式实践
  • CasRel开源镜像免配置部署:Argo Workflows编排多阶段知识图谱构建流水线
  • Citra模拟器:跨平台3DS游戏体验方案让玩家突破硬件限制
  • AudioSeal Pixel Studio参数详解:detector false positive rate工业场景容忍阈值
  • Z-Image-Turbo与Unity集成:游戏素材实时生成
  • FreeSWITCH实战:手把手教你用mod_audio_fork对接ASR,实现实时语音转文字
  • Windows下PyTorch环境搭建避坑实录:从驱动更新到虚拟环境,我的CUDA 12.1安装踩坑总结
  • AI 系列之OpenClaw 深度剖析
  • Qwen3-VL-2B-Instruct扩展部署:多实例负载均衡
  • 表观转录组学:m⁶A修饰检测技术及其在RNA代谢调控中的作用
  • LF RFID读卡器动态电源门控降噪设计
  • OWL ADVENTURE性能基准测试报告:在不同GPU算力下的推理速度对比
  • Step3-VL-10B模型AI编程助手:代码生成与优化实战
  • 监控视频截图也能用!DAMO-YOLO手机检测WebUI图片级防作弊实战教程
  • 用Z-Image-Turbo做设计:5分钟搞定Logo、头像与创意配图
  • nodejs 和java
  • SenseVoice Small语音识别入门必看:Auto模式自动检测混合语言原理与实测
  • Qwen3-ForcedAligner-0.6B在VMware虚拟机中的部署指南
  • 高精度纸张计数显示装置:从原理到应用的完整指南
  • PostgreSQL权限管理与资源隔离实战:表空间、数据库、模式与角色的协同设计
  • 【深度解析】从 MAI Image 2 到自进化智能体:新一代 AI 系统架构与实战落地
  • python+flask+vue3智慧教育学习笔记系统
  • Whisper语音识别镜像快速上手:一键部署,支持99种语言自动转录
  • Z-Image-Turbo-rinaiqiao-huiyewunv 辅助C语言学习:代码解释与调试建议生成
  • BM32S3021-1红外手势模块UART通信与Arduino驱动解析
  • Cosmos-Reason1-7B与Node.js后端集成:构建高性能AI应用接口
  • Wan2.2-T2V-A5B与CAD设计联动:三维模型渲染图转动态展示视频
  • Qwen-Image-2512-Pixel-Art-LoRA 社区挑战赛优秀作品展:“未来城市“主题
  • 操作系统下DMA:提升磁盘I_O性能的有效方法