代码


#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;
}

总结


最难的一点就是要控制左闭右开的区间,一些边界条件非常难控制。

最新文章

  1. mongodb的用户管理及安全认证
  2. BZOJ1500: [NOI2005]维修数列[splay ***]
  3. 2015年3月阿里内推(c++研发)实习生电面经历
  4. (转)清理AIX的/var文件系统大小
  5. Masonry(AutoLayout)的使用
  6. File文件的Api的各种方法
  7. UVaLive 6802 Turtle Graphics (水题,模拟)
  8. 第四章TPLINK 703n 重要恢复方法,非TTL串口连接
  9. 熟知CDN
  10. java 读excel xlsx
  11. 2.QT中使用资源文件,程序打包
  12. Win10开机“提示语音”以及”随机播放音乐”
  13. ES优化总结
  14. .NET手记-Autofac进阶(注册的概念 Registering Concepts)
  15. Instrumentation 功能介绍(javaagent)
  16. 天猫京东app中常见的上下滚动轮播效果如何实现?
  17. c# Mongodb创建自增列
  18. 谈谈对Python装饰器的理解
  19. curl命令大全
  20. ubuntu中查看各种设备和资源的命令汇总

热门文章

  1. 1.RabbitMQ系列之服务启动
  2. DevOps|高效能敏捷交付组织:特性团队(FeatureTeam)+Scrum
  3. vue3中$attrs的变化与inheritAttrs的使用
  4. Codeforces Round #820 (Div. 3) A-G
  5. gin框架——使用viper读取配置
  6. 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis
  7. 畅联新增插件:新增依爱NB烟感
  8. November 练习(Tou Xue)打卡
  9. HDLBits答案——Verification: Reading Simulations
  10. Codeforces Round #833 (Div. 2)补题