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

快速排序基础递归版

include<bits/stdc++.h>

using namespace std;
template
int Partition(T a[],int low,int height){
T pivot=a[low];//这个要用T,因为你不知道这个是什么类型的数据
while(low<height){
while(low<height&&a[height]>=pivot)height--;
a[low]=a[height];
while(low<height&&a[low]<=pivot)low++;
a[height]=a[low];
}
a[low]=pivot;
return low;
}
template
void QuickSort(T a[],int low,int height){
if(low<height){
int pivot=Partition(a,low,height);
QuickSort(a,low,pivot-1);
QuickSort(a,pivot+1,height);
}
}
template
void QuickSort(T a[],int len){
QuickSort(a,0,len-1);
}
int main(){
int a[5]={3,5,7,8,9};
QuickSort(a,5);
int b[5]={1,1,10,9,8};
QuickSort(b,5);
for(auto i:a)cout<<i<<" ";
cout<<endl;
for(auto j:b)cout<<j<<" ";
}
/*
这个有什么缺点呢:
1:如果输入的数据是降序的或者升序的话,那么就会退化为n*n
因为如果正常的递归深度是logn

2:致命伤二:处理“大量重复元素”时的无力感
OI Wiki 逻辑:
while (low < high && pivot <= A[high]) --high;
while (low < high && A[low] <= pivot) ++low;
模拟情景: 假设数组里全是相等的数,如 [5, 5, 5, 5, 5]。
high 指针会一直减,直到撞上 low。
low 指针完全不动。
Partition 返回的索引依然是边界。
后果: 面对全相等的数据,这个模板依然会退化成 O(n ^2)
为什么双指针实战版可以?
实战版的 while(a[i] < pivot)(注意没有等号)会让指针在遇到相等元素时停止并发生交换。
虽然交换看似多余,但它强制让两个指针在中间相遇,从而保证了左右子区间的绝对平衡。

3:OI Wiki 逻辑: 这种“挖坑填数”法在每一轮 while 循环里都有两次赋值操作:
A[low] = A[high] 和 A[high] = A[low]。
实战双指针逻辑: 只有在两个指针都停下时才执行一次 std::swap。
后果: 在处理海量数据时,频繁的内存赋值会导致常数开销变大。
虽然不至于超时,但运行速度会明显慢于双指针版。

4:容易错
OI Wiki 写法: 非常依赖 low < high 的判断和指针的细微移动。
如果你漏写了一个等号,或者顺序反了,极其容易死循环。
双指针写法: do i++; while(a[i] < pivot); 这种写法逻辑更加自恰,且由于它不依赖于 low 和 high 的交替覆盖,代码出错的概率更低。
*/

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

相关文章:

  • 2026年 南通直播代运营服务商推荐榜单:全案直播策划/主播代播/带货转化,本地企业直播闭环解决方案深度解析 - 品牌企业推荐师(官方)
  • 2026年3月不锈钢桥架厂家推荐榜,彰显国产技术实力 - 品牌鉴赏师
  • Qt QEventLoop类,10分钟讲清楚
  • 2026年3月全钢附着式升降脚手架厂家推荐,行业测评与选择指南 - 品牌鉴赏师
  • Qt QQuickView,10分钟讲清楚
  • 科晶生物实战:基于AI算法进行蛋白质改造的模型管线
  • 写好Prompt的最佳实践:7个具体步骤
  • 碳中和承诺示范单位认定标准与价值解读
  • AI绘图神器来袭,这下网络拓扑再也不用愁
  • 中美储能系统热失控管理之气体探测安全防护策略对比
  • 低代码平台横评:8大主流厂商的权限模型、审计留痕与密钥治理
  • 2026年 南通短视频服务商推荐榜单:短视频运营/拍摄/获客/推广/投流/直播/抖音代运营/代拍一站式创意解决方案 - 品牌企业推荐师(官方)
  • MySQL进阶-8-集群架构与实践5
  • 汽车性能50个MATLAB仿真模型全套50个汽车性能建模与仿真源码模型,电子版matlab,simulink模型
  • 基于PHP、asp.net、java、Springboot、SSM、vue3的DDos入侵检测算法的设计与实现
  • 十五五战略下智算中心的政策支撑与发展蓝图:《2026智算中心落地建设实践路径指南》
  • 2026成人本科推荐:零基础入学报名门槛与学费性价比综合对比评测 - 速递信息
  • 3.3王建民上课
  • 2026年3月镀锌桥架厂家推荐,行业测评与选择指南 - 品牌鉴赏师
  • 大材料 Cassandra 与其他数据库的对比分析
  • 二叉树的最大深度-leetcode
  • 2026年3月实测:全国GJB9001C国军标认证代办机构公司综合实力及口碑测评 - 速递信息
  • “光能智测”太阳能预测技术——融合WRF-Solar与多源数据的短-中长期预报(从环境搭建、模式编译、物理方案配置,到卫星遥感AOD数据同化应用、地面观测验证、机器学习后处理空间降尺度及不确定性分析)
  • AI大模型支持下:Python自然科学领域机器学习与深度学习【(随机森林、XGBoost、CNN、LSTM、Transformer等),从数据预处理、不确定性量化、可解释性分析,到时空建模】
  • 多款合规板材供应商详解,助力科学选购 - 速递信息
  • 复工“找阿姨”成热潮,厦门叭叭找以专业与信任破解用工难题 - 速递信息
  • 机考刷题之 2 LeetCode 112 路径总合
  • 板刷数学思维总结
  • D006 【模板】并查集
  • 别错过!AI应用架构师阐述AI驱动虚拟世界构建新策略