首页/新闻资讯/正文详情

分治排序的应用

发布时间:2026/9/24 17:36:51 来源:云帆数科 栏目:资讯中心
分治排序的应用
1. 归并排序题目链接https://www.luogu.com.cn/problem/P1177#ide#includebits/stdc.husingnamespacestd;// 传入 l, mid, r 明确告诉 merge 函数要合并哪两段voidmerge(vectorinta,intl,intmid,intr,vectorinttemp){intil;// 左半边起点intjmid1;// 右半边起点intkl;// 临时数组写入起点// 比较两半元素while(imidjr){if(a[i]a[j])temp[k]a[i];elsetemp[k]a[j];}// 拷贝剩余元素while(imid)temp[k]a[i];while(jr)temp[k]a[j];// 写回原数组for(intml;mr;m){a[m]temp[m];}}voidmergeSort(vectorinta,intl,intr,vectorinttemp){if(lr)return;intmidl(r-l)/2;mergeSort(a,l,mid,temp);// 1. 排左边 [l, mid]mergeSort(a,mid1,r,temp);// 2. 排右边 [mid 1, r]merge(a,l,mid,r,temp);// 3. 把 [l, mid] 和 [mid 1, r] 合并}intmain(){// 提升 cin/cout 读取效率可选但对于洛谷等 OJ 可以防止超时ios::sync_with_stdio(false);cin.tie(nullptr);intn;if(!(cinn))return0;vectorinta(n);for(inti0;in;i){cina[i];}// 开辟辅助数组 temp大小与原数组一致vectorinttemp(n);// 调用归并排序传入区间 [0, n - 1] 和辅助数组 tempmergeSort(a,0,n-1,temp);// 输出排序后的数组数字间用空格隔开for(inti0;in;i){couta[i](in-1?: );}cout\n;return0;}2. 数组中的逆序对剑指 Offer 51题目链接https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof/description/classSolution{public:intmerge(vectorintrecord,vectorinttemp,intleft,intright,intmid){intileft;intjmid1;intkleft;intcount0;while(imidjright){if(record[i]record[j]){temp[k]record[i];}else{countmid-i1;temp[k]record[j];}}while(imid){temp[k]record[i];}while(jright){temp[k]record[j];}for(intileft;iright;i){record[i]temp[i];}returncount;}intmergeSort(vectorintrecord,vectorinttemp,intleft,intright){if(leftright){return0;}intmid(leftright)/2;intcountmergeSort(record,temp,left,mid)mergeSort(record,temp,mid1,right);countmerge(record,temp,left,right,mid);returncount;}public:intreversePairs(vectorintrecord){if(record.empty())return0;vectorinttemp(record.size());returnmergeSort(record,temp,0,record.size()-1);}};3. 最大子数组和题目链接https://leetcode.cn/problems/maximum-subarray/description/#includevector#includealgorithmusingnamespacestd;classSolution{structStatus{intlSum;// 以左端点起的最大连续和intrSum;// 以右端点结尾的最大连续和intmSum;// 区间内的最大连续和intiSum;// 区间总和};// 合并左右两个区间的信息StatuspushUp(constStatusL,constStatusR){intiSumL.iSumR.iSum;intlSummax(L.lSum,L.iSumL.rSum);intrSummax(R.rSum,R.iSumL.rSum);intmSummax({L.mSum,R.mSum,L.rSumL.lSum});return{lSum,rSum,mSum,iSum};}// 分治递归求解StatusgetStatus(vectorintnums,intl,intr){if(lr){return{nums[l],nums[l],nums[l],nums[l]};}intmidl(r-l)/2;Status leftStatusgetStatus(nums,l,mid);Status rightStatusgetStatus(nums,mid1,r);returnpushUp(leftStatus,rightStatus);}public:intmaxSubArray(vectorintnums){returngetStatus(nums,0,nums.size()-1).mSum;}};4. 最小 K 个数题目链接https://leetcode.cn/problems/smallest-k-lcci/description/classSolution{public:vectorintsmallestK(vectorintarr,intk){if(k0||arr.empty()){return{};}quickSelect(arr,0,arr.size()-1,k);returnvectorint(arr.begin(),arr.begin()k);}private:voidquickSelect(vectorintarr,intl,intr,intk){if(lr)return;// 随机选择 pivot 避免极端情况如退化为 O(N^2)intpivotIndexlrand()%(r-l1);swap(arr[pivotIndex],arr[r]);intipartition(arr,l,r);if(ik){return;// 已经找到了前 k 个小的元素排在 arr[0...k-1]}elseif(ik){quickSelect(arr,l,i-1,k);// 在左半部分继续寻找}else{quickSelect(arr,i1,r,k);// 在右半部分继续寻找}}intpartition(vectorintarr,intl,intr){intpivotarr[r];intil;for(intjl;jr;j){if(arr[j]pivot){swap(arr[i],arr[j]);i;}}swap(arr[i],arr[r]);returni;}};5. 数组中的第 K 个最大元素题目链接https://leetcode.cn/problems/kth-largest-element-in-an-array/description/classSolution{public:intfindKthLargest(vectorintnums,intk){returnquickSelect(nums,0,nums.size()-1,k);}private:intquickSelect(vectorintnums,intleft,intright,intk){if(leftright)returnnums[left];// 随机选择 pivot 避免极端退化intpivotIndexleftrand()%(right-left1);intpivotnums[pivotIndex];// 三路划分 ( 三方偏序 / Dutch National Flag )intlleft,ileft,rright;while(ir){if(nums[i]pivot){swap(nums[l],nums[i]);}elseif(nums[i]pivot){swap(nums[i],nums[r--]);}else{i;}}// 划分后区间分为// [left, l - 1] : 严格大于 pivot (个数为 bigCount)// [l, r] : 等于 pivot// [r 1, right] : 严格小于 pivotintbigCountl-left;intequalCountr-l1;if(kbigCount){// 第 k 大元素在大于 pivot 的部分returnquickSelect(nums,left,l-1,k);}elseif(kbigCountequalCount){// 第 k 大元素刚好等于 pivotreturnpivot;}else{// 第 k 大元素在小于 pivot 的部分更新 k 值returnquickSelect(nums,r1,right,k-bigCount-equalCount);}}};6. 快速排序#includeiostreamusingnamespacestd;// 快排函数对 arr[l] ~ arr[r] 排序voidquickSort(intarr[],intl,intr){if(lr)return;// 递归终止条件intpivotarr[l];// 选最左元素作为基准intil,jr;while(ij){// 右边找小于pivot的while(ijarr[j]pivot)j--;arr[i]arr[j];// 左边找大于pivot的while(ijarr[i]pivot)i;arr[j]arr[i];}arr[i]pivot;// 基准放到最终位置quickSort(arr,l,i-1);// 左区间递归quickSort(arr,i1,r);// 右区间递归}intmain(){inta[]{5,3,8,4,2,7,1,6};intnsizeof(a)/sizeof(a[0]);quickSort(a,0,n-1);for(inti0;in;i)couta[i] ;return0;}

相关推荐

深入理解C++系列(22)——智能指针的
深入理解C++系列(22)——智能指针的

⭐️博主: 此生决int-CSDN博客 速胜派就是最大的投降派!!! 🔥热门专栏🔥 深入理解 C 系列 | 算法系列 快速复习系列 | Java 速通系列 文章目录上期回顾智能指针的使用及其原理1. 智… · 2026/9/24 17:36:51

Nat. Genet. | 120万细胞绘制人类皮肤空间单细胞图谱:关键不只是细胞类型,而是“空间邻域”
Nat. Genet. | 120万细胞绘制人类皮肤空间单细胞图谱:关键不只是细胞类型,而是“空间邻域”

皮肤不是一层均质屏障,而是一个跨部位、跨结构、跨免疫-基质互作的复杂器官。过去单细胞研究能告诉我们有哪些细胞,但很难回答:这些细胞在身体不同部位如何组织成稳定的空间结构? 这篇文章的核心,是把人类皮肤从“细胞… · 2026/9/24 17:36:51

CTLE(连续时间线性均衡)解析
CTLE(连续时间线性均衡)解析

目录 1. CTLE 的基本原理 1.1 为什么需要 CTLE? 1.2 CTLE 的典型传递函数 1.3 CTLE 的频域补偿效果 1.4 时域上的效果 未使用 CTLE 时 使用 CTLE 后 2. CTLE 的典型电路实现 3. CTLE 在系统中的信号流程 3.1 高速数据路径流程图 4. CTLE 的配置与自适应流… · 2026/9/24 17:36:51

当你的论文终于定稿,真正的大考才刚刚开始——聊聊aigcbiye的AI PPT功能一个被忽视的真相
当你的论文终于定稿,真正的大考才刚刚开始——聊聊aigcbiye的AI PPT功能一个被忽视的真相

aigcbiye官网 微信公众号搜一搜 aigcbiye 我带了这么多年论文写作,发现一个特别有意思的现象:很多人把论文正文写完,长舒一口气,以为最难的关卡已经过了。然后他们打开PPT,新建一个空白文档,盯着那个闪烁的… · 2026/9/24 18:12:35

Java超市积分管理系统实战:数据库设计与事务处理全解析
Java超市积分管理系统实战:数据库设计与事务处理全解析

简介:面向Java Web学习者和高校毕设学生的超市积分管理系统完整项目资料包,以会员积分、商品管理等典型业务场景为线索,帮助读者掌握从需求分析到编码实现的全流程。压缩包仅18.21MB,共5个文件,其中sql为数据库脚本、d… · 2026/9/24 18:12:28

车载驾驶员疲劳检测实战:轻量模型+鲁棒设计+毕设落地指南
车载驾驶员疲劳检测实战:轻量模型+鲁棒设计+毕设落地指南

简介:本资源是一套面向计算机专业本科生的毕业设计实战项目,聚焦驾驶员疲劳状态识别这一实际安全需求,基于卷积神经网络实现人脸检测、关键特征提取与疲劳判别预警全流程。适用于正在开展毕设、课程设计或期末大作业的学生,也适合… · 2026/9/24 18:12:28

YOLO卫星遥感多类别目标检测数据集:从标注格式到训练调参全攻略
YOLO卫星遥感多类别目标检测数据集:从标注格式到训练调参全攻略

简介:YOLO卫星遥感多类别检测数据集,适合正在学习目标检测或从事遥感影像识别应用的开发者。资源围绕真实场景的高质量卫星影像构建,使用LabelImg标注,标注框规范,同时提供VOC(xml)、COCO&#… · 2026/9/24 18:12:28

2026全球锂电干燥设备行业全景解析:市场扩容、技术迭代与全球化布局机遇
2026全球锂电干燥设备行业全景解析:市场扩容、技术迭代与全球化布局机遇

锂电干燥设备是锂电池制造环节的核心工艺装备,直接决定电芯的水分控制水平,进而影响电池的循环寿命、安全性能与量产良率。随着2026年全球动力电池与储能电池产能持续扩张,锂电干燥设备行业已经从单纯的产能驱动阶段,全面进入“技… · 2026/9/24 18:12:22

asd asd
asd asd

sad sad asd · 2026/9/24 18:12:16

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码