快速排序——C++左闭右开区间实现
2024-10-20 13:51:48
代码
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
//快速排序接口
void quickSort(vector<int> &vec, vector<int>::iterator begin, vector<int>::iterator end)
{
if (end != vec.begin() && begin < end - 1)
{
vector<int>::difference_type pivot = partition(vec, begin, end - 1);
quickSort(vec, begin, vec.begin() + pivot);
quickSort(vec, vec.begin() + pivot + 1, end);
}
}
private:
//实现移动
vector<int>::difference_type partition(vector<int> &vec, vector<int>::iterator begin, vector<int>::iterator end)
{
findMidOfThree(vec,begin,end);
while (begin < end)
{
while (begin < end && *begin < *end) end--;
swap(*begin, *(end));
while (begin < end && *begin < *(end)) begin++;
swap(*begin, *(end));
}
return begin-vec.begin();
}
//实现查找中位数并且交换位置,防止达到最坏复杂度
void findMidOfThree(vector<int> &vec, vector<int>::iterator begin, vector<int>::iterator end)
{
vector<int>::iterator midIter = (begin + (end-begin)/2);
if ((*begin > *end&&*begin < *midIter) ||
(*begin<*end&&*begin>*midIter))
return;
if ((*midIter > *begin&&*midIter < *end) ||
(*midIter > *end&&*midIter < *begin))
swap(*midIter, *begin);
if ((*end > *begin&&*end < *midIter) ||
(*end > *midIter&&*end < *begin))
swap(*end, *begin);
}
};
#include"快速排序.h"
void main()
{
Solution s;
vector<int> test = { 1,3,5,7,9,2,4,6,8,10 };
s.quickSort(test, test.begin(), test.end());
for (auto i : test)
{
cout << i << " ";
}
cout << endl;
}
总结
最难的一点就是要控制左闭右开的区间,一些边界条件非常难控制。
最新文章
- mongodb的用户管理及安全认证
- BZOJ1500: [NOI2005]维修数列[splay ***]
- 2015年3月阿里内推(c++研发)实习生电面经历
- (转)清理AIX的/var文件系统大小
- Masonry(AutoLayout)的使用
- File文件的Api的各种方法
- UVaLive 6802 Turtle Graphics (水题,模拟)
- 第四章TPLINK 703n 重要恢复方法,非TTL串口连接
- 熟知CDN
- java 读excel xlsx
- 2.QT中使用资源文件,程序打包
- Win10开机“提示语音”以及”随机播放音乐”
- ES优化总结
- .NET手记-Autofac进阶(注册的概念 Registering Concepts)
- Instrumentation 功能介绍(javaagent)
- 天猫京东app中常见的上下滚动轮播效果如何实现?
- c# Mongodb创建自增列
- 谈谈对Python装饰器的理解
- curl命令大全
- ubuntu中查看各种设备和资源的命令汇总
热门文章
- 1.RabbitMQ系列之服务启动
- DevOps|高效能敏捷交付组织:特性团队(FeatureTeam)+Scrum
- vue3中$attrs的变化与inheritAttrs的使用
- Codeforces Round #820 (Div. 3) A-G
- gin框架——使用viper读取配置
- 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis
- 畅联新增插件:新增依爱NB烟感
- November 练习(Tou Xue)打卡
- HDLBits答案——Verification: Reading Simulations
- Codeforces Round #833 (Div. 2)补题