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

【C++】排序算法 --快速排序与归并排序

目录

  • 颜色分类(数组分三块思想)
    • 快速排序
    • 归并排序

颜色分类(数组分三块思想)

给定⼀个包含红⾊、⽩⾊和蓝⾊、共 n 个元素的数组 nums ,原地对它们进⾏排序,使得相同颜⾊
的元素相邻,并按照红⾊、⽩⾊、蓝⾊顺序排列。
我们使⽤整数 0、 1 和 2 分别表⽰红⾊、⽩⾊和蓝⾊。
必须在不使⽤库的 sort 函数的情况下解决这个问题。
示例 1:
输⼊:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

请添加图片描述

class Solution {
public:void sortColors(vector<int>& nums) {int i = 0;int left = i-1;int right = nums.size();//数组分三块while(i<right){if(nums[i] == 1) i++;else if(nums[i] == 0) {swap(nums[i],nums[++left]);i++;}else swap(nums[i],nums[--right]);}}
};

快速排序

类似于前序遍历,先分块,再分治。
请添加图片描述

class Solution {
public:vector<int> sortArray(vector<int>& nums) {qsort(nums,0,nums.size()-1);return nums;}void qsort(vector<int>& nums,int l,int r){//递归结束条件if(l >= r) return;//要么区间不存在,要么只剩下一个元素int i = l;int left = l-1,right = r+1;int key = nums[i];//数组分块while(i < right){if(nums[i]==key) i++;else if(nums[i]< key) {swap(nums[i],nums[++left]);i++;}else swap(nums[i],nums[--right]);}//分治qsort(nums,l,left);qsort(nums,right,r);}
};

归并排序

类似于后序遍历,先分治,再归并。
请添加图片描述

class Solution {
public:vector<int> temp;vector<int> sortArray(vector<int>& nums) {temp.resize(nums.size());msort(nums,0,nums.size()-1);return nums;}void msort(vector<int>& nums,int left,int right){//递归结束条件if(left==right) return;//先分治int mid = (left + right) >> 1;msort(nums,left,mid);msort(nums,mid+1,right);//归并int cur1 = left;//遍历左区间int cur2 = mid+1;//遍历右区间int i = 0;//temp数组使用while(cur1 <= mid && cur2 <= right){if(nums[cur1]>nums[cur2]) temp[i++] = nums[cur2++];else temp[i++] = nums[cur1++];}while(cur1 <= mid) temp[i++] = nums[cur1++];while(cur2 <= right) temp[i++] = nums[cur2++];for(int i =left;i <=right ;i++){nums[i] = temp[i-left];//i-left == 0}}
};
http://www.lryc.cn/news/334998.html

相关文章:

  • (Python)根据经纬度从数字高程模型(DEM)文件获取高度
  • 【WPF应用41】WPF中的Expander控件详解
  • golang变量初始化顺序
  • 魔众 文库配置异步转换
  • 创建型模式--2.简单工厂模式【人造恶魔果实工厂1】
  • 一些考研经验
  • StockTrading AI小模型股票自动交易系统 转载
  • 01背包问题合集 蓝桥OJ
  • Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG
  • 鸿蒙OS开发实战:【自动化测试框架】使用指南
  • 算法(二分查找)
  • 运筹学基础(六)列生成算法(Column generation)
  • [阅读笔记] 电除尘器类细分市场2023年报
  • Kubernetes学习笔记11
  • ✌2024/4/3—力扣—无重复字符的最长子串
  • Tauri 进阶使用与实践指南
  • 2024年最新社交相亲系统源码下载
  • git知识
  • 代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球
  • golang defer实现
  • 数据仓库实践
  • 深入浅出 -- 系统架构之微服务标准组件及职责
  • IP协议中的四大支柱:DHCP、NAT、ICMP和IGMP的功能剖析
  • 基于Socket简单的UDP网络程序
  • 计算机思维
  • 如何判断一个linux机器是物理机还是虚拟机
  • python用requests的post提交data数据以及json和字典的转换
  • 【Datax分库分表导数解决方法】MySQL_to_Hive
  • Vue2 —— 学习(一)
  • Windows Server 2008添加Web服务器(IIS)、WebDAV服务、网络负载均衡