快速排序——C++左闭右开区间实现
代码
#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;
}总结
最难的一点就是要控制左闭右开的区间,一些边界条件非常难控制。
快速排序——C++左闭右开区间实现的更多相关文章
- range 的实现细节(start、end、step)(左闭右开区间)
		range(int start, int end, int step); 返回的区间是 [start, end) 要求步长为 step,三个参数均为整数, 在底层实现时,最终返回的区间元素的数目应当为 ... 
- Find the median(2019年牛客多校第七场E题+左闭右开线段树)
		题目链接 传送门 题意 每次往集合里面添加一段连续区间的数,然后询问当前集合内的中位数. 思路 思路很好想,但是卡内存. 当时写的动态开点线段树没卡过去,赛后机房大佬用动态开点过了,\(tql\). ... 
- 左闭右开线段树 2019牛客多校(第七场)E_Find the median(点代表区间
		目录 题意 一种解析 AC_Code @(2019第七场牛客 E_Find the median 左闭右开线段树) 题意 链接:here 我理解的题意就是:初始序列为空,有\(n(400000)\)次 ... 
- 牛客多校第八场E Explorer(左开右闭线段树+可撤回并查集)题解
		题意: 传送门 有\(n\)个点构成一个无向图,每条边有\(L_i,R_i\)表示这条边只能允许编号为\(L_i\dots R_i\)的人通过,现在问你最多有几个人能从\(1\)走到\(n\). 思路 ... 
- STL——前闭后开区间表示法和function call 操作符
		前开后闭开区间表示法[) 任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标示的区间,用以表示操作范围,这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示,也就是说,整 ... 
- 【代码笔记】iOS-可以向左(右)滑动
		一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ... 
- js实现图片加载特效(从左到右,百叶窗,从中间到两边)
		/* 网上百度的,感觉”从中间到两边“的效果写的不是很好,改了一下,感觉可以了!*/<html> <head> <title></title> < ... 
- c++ 左值右值 函数模板
		1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ... 
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
		题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ... 
- layer-list实现只有左、右和下边框的圆角矩形
		项目中需要实现如下效果的布局 也就是一个左右下角带圆角,上方不带圆角的白色背景矩形,而且只有左.右和下边框,颜色为浅灰色. 当然,切一个.9图片作为背景也能实现,但是能用代码实现的还是尽量用代码实现, ... 
随机推荐
- Linux基础_5_文件管理
			创建 touch 文件名 #创建文件 stat 文件名 #查看文件属性 touch -am 文件名 #更改文件的访问时间及修改时间 删除 rm -rf s/* #递归强制删除s目录下的所有内容(包括文 ... 
- 一步一图带你深入理解 Linux 虚拟内存管理
			写在本文开始之前.... 从本文开始我们就正式开启了 Linux 内核内存管理子系统源码解析系列,笔者还是会秉承之前系列文章的风格,采用一步一图的方式先是详细介绍相关原理,在保证大家清晰理解原理的基础 ... 
- 机器学习实战-AdaBoost
			1.概念 从若学习算法出发,反复学恶习得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器构成一个强分类器.简单说就是假如有一堆数据data,不管是采用逻辑回归还是SVM算法对当前数据集通过分类 ... 
- Ruoyi表单构建
			Ruoyi表单构建通过拖动组件就能自动生成前端代码,很方便,所以本文简单通过上层函数源码来梳理一下大致流程,如有需要再自行仔细一行行分析底层代码. 组件拖动 实现组件拖动功能主要依赖第三方库:VueD ... 
- .NET Conf 2022 – 11 月 8 日至 10 日
			.NET Conf 2022 下周就正式开启了,时间是美国时间的 11月8日至10日..NET Conf 2022是一个免费的,为期三天的, 虚拟开发人员活动提供多种实时会话,其中包括来自社区和 .N ... 
- 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)
			小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ... 
- PHP 模仿表单提交
			function curl($url,$data,$headers){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_UR ... 
- WSL优化之SSH远程登录篇
			Some of the most devastating things that happen to you will teach you the most. 有些最打击你的事情反而教会你的东西越多. ... 
- uwsgi 启动配置文件
			# uwsig使用配置文件启动 [uwsgi] # 项目目录 chdir=/myfiles/xxx/xxx/my_project # 指定项目的application module=my_projec ... 
- 处理get请求中文乱码tomcat请求
			修改tomcat中server配置:添加 URIEncoding="UTF-8" <Connector port="8090" protocol=&quo ... 
