排序算法(快排、归并、计数、基数排序)
排序排序概览排序方法时间复杂度平均时间复杂度最坏稳定性快速排序nlognn方不稳定归并排序nlognnlogn稳定计数排序nknk稳定基数排序n kn k稳定堆排序nlognnlogn不稳定选择排序n方n方不稳定冒泡排序n方n方稳定插入排序n方n方稳定一.快速排序排序思想排序区间为[l, r]如果区间长度小于等于1则直接退出, 否则选一个区间中随机的数字x与l位元素交换作为比较元素将大于x的数字放在左边, 小于的放在右边,等于的也要换边!!此时x的位置已经固定, 对两边区域的分别递归一开始的区间为[1, n]两个指针分别从l和r开始向中间扫描, 直到相遇结束一次扫描代码实现void quicksort(int l,int r){ if(l r) return; swap(a[l], a[l rand() % (r - l 1)]); int x a[l]; int i l, j r; while(i j){ while(i j a[j] x) j--; if(i j) a[i] a[j]; while(i j a[i] x) i; if(i j) a[j--] a[i]; } a[i] x; quicksort(l, i - 1); quicksort(i 1, r); }补充实际打比赛可用sort()函数, 可以直接快排对于多关键字排序可以重构比较符号struct Node{ int x, y; bool operator (const Node A) const{ if(x ! A.x) return x A.x; return y A.y; } } a[N 1];找第k小的数用快排, 每一轮只要比较i和k, 然后排一半即可二.归并排序排序思想排序区间为[l, r]如果区间长度为1则直接退出, 否则将区间分为[l, m]和[m1, r]俩部分, 其中m ( l r ) / 2递归两个子区间进行排序将两个已经排好的子区间合并一开始只要对区间[1, n]排序即可代码实现void mergesort(int l,int r){ if(l r) return; int m (l r) / 2; mergesort(l, m); mergesott(m 1, r); int p1 l, p2 m 1, tot 0; while(p1 m p2 r){ if(a[p1] a[p2]) c[tot] a[p1]; else c[tot] a[p2]; } while(p1 m) c[tot] a[p1]; while(p2 r) c[tot] a[p2]; for(int i 1; i tot; i) a[i l - 1] c[i]; }三.计数排序排序思想统计每个数据出现了几次统计完每个元素后, 求一遍前缀和, 就知道每个数字在排序完后的序列中出现的位置把数字填入对应的位置即可代码实现int n, m, a[N 1], c[M 1], r[N 1]; inline void countingsort(){ memset(c, 0, sizeof(c)); for(int i 1; i n; i) c[a[i]]; for(int i 1; i m; i){ for(int j 1; j c[i]; j) printf(%d, r[i]); } printf(\n); for(int i 2; i m; i) c[i] c[i-1]; for(int i n; i; --i) r[i] c[a[i]]--; for(int i 1; i n; i) printf(%d, r[i]); printf(\n); }补充适用于值域范围较小的数字排列四.基数排序排序思想拆分成m个关键字, 从后往前对这些关键字排序, 每次排序会使用上一次的排序结果每一次是用计数排序来实现假设已经排完了第i个及以后的关键字, 现在要排第i - 1个关键字,这里是一个双关键字排序, 第一关键字是第i - 1个关键字, 第二关键字是第i个及以后的关键字的rank我们只需要把数字按照第i个及以后的关键字从小到大排序放在数组里, 再进行一次计数排序即可( 因为计数排序是稳定的 )代码实现int n, m, a[N 1], sa[N 1], v[N 1], r[N 1], c[M 1]; inline void countingsort(){ memset(c, 0, sizeof(c)); for(int i 1; i n; i) c[a[i]]; for(int i 2; i m; i) c[i] c[i-1]; for(int i n; i; --i) r[sa[i]] c[v[sa[i]]]--; for(int i 1; i n; i) sa[r[i]] i; } inline void radisort(){ for(int i 1; i n; i) sa[i] i; int x 1; for(int i 1; i m; i, x*10){ for(int j 1; j n; j) v[j] a[j] / x % 10; countingsort(); } }补充基数排序经常被用于字符串的排序, 比如说后缀数组的核心就是基数排序

相关新闻

AI代码审查实践:从Claude Tag看自动化PR处理与提示词优化

AI代码审查实践:从Claude Tag看自动化PR处理与提示词优化

如果你最近关注 AI 编程助手的发展,可能会发现一个明显的趋势:从简单的代码补全,到能够自主完成复杂工程任务,AI 正在重新定义开发流程。而 Anthropic 团队近期透露的一个内部数据尤为引人注目——他们的内部工具 Claude Tag 已经…

2026/7/23 2:20:09 阅读更多 →
人才发展与梯队培养全景图

人才发展与梯队培养全景图

人才发展与梯队培养全景图

2026/7/23 2:20:09 阅读更多 →
2026年会议纪要录音转文字推荐AI高识别快整理 省心产出规范纪要

2026年会议纪要录音转文字推荐AI高识别快整理 省心产出规范纪要

2026年适合会议纪要录音转文字的AI工具,可根据自身会议场景、整理需求从定向推荐清单中选择。适合需要快速产出规范纪要、减少手动整理工作量的职场人、效率工具爱好者。核心筛选标准为转写准确率、后续纪要处理能力、单小时录音处理效率,不适合坚持全流…

2026/7/23 2:20:09 阅读更多 →

最新新闻

Tiva™ ADC采样序列与数字比较器硬件联动实现实时监控

Tiva™ ADC采样序列与数字比较器硬件联动实现实时监控

1. 项目概述与核心价值在嵌入式实时控制领域,比如电机驱动、电源管理或者精密传感器监测,我们常常面临一个核心矛盾:一方面,我们需要高精度、多通道的ADC采样来获取系统状态;另一方面,我们又需要对这些采样…

2026/7/23 2:58:24 阅读更多 →
EG2153 芯片解析 600V 自振荡半桥驱动 降低 BOM 成本 集成振荡 + 高压悬浮驱动 IC

EG2153 芯片解析 600V 自振荡半桥驱动 降低 BOM 成本 集成振荡 + 高压悬浮驱动 IC

一、芯片定位:替代进口,简化半桥拓扑的集成驱动 IC 屹晶微电子 EG2153 是一款内置振荡器 600V 高压半桥栅极驱动专用芯片,对标 IR2153 系列进口驱动,单颗 SOP8 芯片整合振荡生成、高低侧 MOS/IGBT 驱动、多层保护、自举供电模块&…

2026/7/23 2:58:23 阅读更多 →
AI Agent 上下文工程实战:为什么你的 Agent 总是「记不住」也「听不懂」

AI Agent 上下文工程实战:为什么你的 Agent 总是「记不住」也「听不懂」

上周我让 Agent 改一个 bug。它看了代码、理解了问题、写了修复——然后把我三个月前特意加的一段安全校验逻辑删掉了。我问它为什么删,它说「没看到那段代码」。那段代码就在它改的函数上面,隔了 14 行。 这不是模型笨。这是上下文工程没做好。 一个问…

2026/7/23 2:58:23 阅读更多 →
宽压零功耗降压方案优选 屹晶微 EG1192H DCDC 电源芯片,工业 电动车电源一站式解决方案 国产替代优选!EG1192H 宽压零功耗降压电源芯片

宽压零功耗降压方案优选 屹晶微 EG1192H DCDC 电源芯片,工业 电动车电源一站式解决方案 国产替代优选!EG1192H 宽压零功耗降压电源芯片

一、高压供电痛点难解决? 在电动车控制器、工业控制系统、平衡车、快充电源等场景中,高压宽幅输入、待机耗电、散热限流、外围器件繁杂一直是电源设计的几大难题: 1.车载电池电压波动大,普通降压芯片耐压不足,极易损坏…

2026/7/23 2:58:23 阅读更多 →
HALO框架:企业级AI如何通过分层监督实现零幻觉输出

HALO框架:企业级AI如何通过分层监督实现零幻觉输出

你肯定遇到过这种情况:用大模型处理企业文档,它流畅地给出答案,引用了看似具体的条款和数据,但仔细一查,发现合同编号是编的,财务数字是臆造的,甚至整个案例都是它“即兴创作”的。这不是模型在…

2026/7/23 2:58:23 阅读更多 →
AI 软件简报 07.18-07.22 大模型定价 ,MCP协议,投资

AI 软件简报 07.18-07.22 大模型定价 ,MCP协议,投资

每期覆盖 3-4 天的 AI 软件动态。个人视角,不追求面面俱到。周三、六更新。这四天(7.19-7.22)的 AI 软件圈,表面看是三件事:模型继续发、融资继续烧、协议继续改。但我想聊的是水面下那条更值得注意的线——AI 基础设施…

2026/7/23 2:57:23 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻