新闻详情

新闻详情

首页 / 资讯中心 / 详情

分治排序的应用

发布时间:2026/11/15 4:34:37来源:尧图网络
分治排序的应用
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;}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉