快速排序及其优化
快排基础性质配套背诵平均时间\(O(nlogn)\)最坏时间\(O(n^2)\)有序 选端点做基准空间复杂度递归栈平均\(O(logn)\)最坏\(O(n)\)不稳定排序// 快速排序的一次划分int Partition (int* arr, int low, int high)//O (n),O (1){int tmp arr [low];// 基准while (low high){// 从后往前找比基准小的数字往前移动while (lowhigh arr [high] tmp){high--;}if (low high){arr [low] arr [high];}// 从前往后找比基准大的数据往后移动while (low high arr [low] tmp){low;}if (low high){arr [high] arr [low];}}arr [low] tmp;return low;}void Quick (int* arr,int low, int high){int par Partition (arr, low,high);if (low par - 1)// 左边的数据个数超过一个{Quick (arr, low, par - 1);}if (par 1 high){Quick (arr, par 1, high);}}// 快速排序void QuickSort (int* arr, int len)//(nlogn),O (logn), 不稳定 (缺点){Quick (arr, 0, len - 1);}快速排序的优化数据结构考试高频简答快排核心问题选到极差基准如最大 / 最小值退化为\(O(n^2)\)优化全部围绕基准、递归、小规模数组展开。1. 基准元素优化最常考① 三数取中法median-of-three取左端、右端、中间位置三个数选中间大小的值作为 pivot。避免在有序 / 逆序数组选到最值当基准大幅减少最坏情况概率。缺点多几次比较小规模数组收益不大。② 随机选基准随机在区间选一个元素作为 pivot。理论上避免有序数组退化适合数据分布未知场景。缺点随机数有开销考试里常和三数取中二选一。2. 小规模子数组改用直接插入排序当待排序区间长度很小一般阈值取 7~10不再递归快排直接插入排序。 原因 递归调用有栈开销小数组时直接插入常数更小比快排更快。3. 减少递归栈开销尾递归优化快排递归处理左右两段会产生递归栈。 优化思路优先递归短区间长区间改用循环处理。作用降低递归栈深度防止有序数据时栈溢出。最坏栈空间由\(O(n)\) → \(O(logn)\)void Quick(int* arr,int low, int high) { while(low high) // 长区间交给循环不压栈 { int par Partition(arr, low,high); // 左右区间选短的去递归长区间继续while if(par - low high - par) { Quick(arr, low, par - 1); // 短区间递归 low par 1; // 长区间留在循环 } else { Quick(arr, par 1, high); // 短区间递归 high par - 1; // 长区间留在循环 } } }4. 三路快排划分优化复试常考普通快排分成小于 pivot、大于 pivot 两段。 三路快排划分成三块小于 pivot、等于 pivot、大于 pivot✅ 适合大量重复元素的数组大量相等元素不再重复递归性能提升巨大。void Quick3way(int arr[], int low, int high) { if(low high) return; int pivot arr[low]; int lt low, gt high; int i low 1; while(i gt) { if(arr[i] pivot) { swap(arr[i], arr[lt]); lt; i; } else if(arr[i] pivot) { swap(arr[i], arr[gt]); gt--; } else // arr[i]pivot直接跳过 { i; } } // [low,lt-1]pivot , [lt,gt]pivot , [gt1,high]pivot Quick3way(arr, low, lt-1); Quick3way(arr, gt1, high); }5. 聚集相等元素另一种重复元素优化划分时把等于基准的元素放中间减少后续递归范围。

相关新闻

AI视频运镜提示词实战指南:让镜头真正动起来

AI视频运镜提示词实战指南:让镜头真正动起来

1. 项目概述:为什么“运镜提示词”正在成为AI漫剧创作的隐形门槛最近帮三个做原创漫剧的朋友调试AI视频生成流程,发现一个特别有意思的现象:他们用的都是同一款主流AI视频工具,输入的剧情文本、角色设定、画风描述几乎一模一样&am…

2026/9/30 16:09:06 阅读更多 →
大模型量化部署全攻略:INT4、GPTQ/AWQ与显存避坑指南

大模型量化部署全攻略:INT4、GPTQ/AWQ与显存避坑指南

最近手里的显存又告急了。一个35B级别的MoE模型,FP16权重文件就要70GB往上,单卡放不下,双卡又嫌推理太慢。后来把模型量化到INT4,整体体积砍掉近70%,在24GB的消费级显卡上也能跑得动,生成速度还快了不少。说…

2026/9/30 16:09:06 阅读更多 →
CentOS 7 离线部署 GNOME 桌面与 XRDP 远程接入

CentOS 7 离线部署 GNOME 桌面与 XRDP 远程接入

1. 为什么在 CentOS 7 上要装桌面再远程接入老实说,一台 CentOS 7 服务器装图形化界面,在很多运维老哥眼里属于"没事找事"。命令行能干的事,图形界面除了吃内存看不出别的用处。但实际项目跑起来,总有一些绕不开的场景&…

2026/9/30 16:09:06 阅读更多 →

最新新闻

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询

Science Skills药物化学技能集:ChEMBL、PubChem与openFDA如何驱动AI智能体完成药物研发数据查询 【免费下载链接】science-skills GDM Science Skills to speed up agentic scientific workflows with better grounding and higher token efficiency. Integrate ins…

2026/9/30 16:45:26 阅读更多 →
英飞凌TC264卡丁快跑:PMSM电机控制与GTM定时器实战解析

英飞凌TC264卡丁快跑:PMSM电机控制与GTM定时器实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
格西烽火:可编程串口协议解析引擎与变量驱动调试平台

格西烽火:可编程串口协议解析引擎与变量驱动调试平台

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
VMware虚拟机安装与使用全攻略:避坑指南与网络配置详解

VMware虚拟机安装与使用全攻略:避坑指南与网络配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
专利撰写实战:从权利要求书到说明书的核心技巧解析

专利撰写实战:从权利要求书到说明书的核心技巧解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 16:45:26 阅读更多 →
treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果

treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果

treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/treg/treg treg 是一个面向 …

2026/9/30 16:44:21 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/30 15:27:04 阅读更多 →