#include <iostream>
#include <vector>
using namespace std;
void Swap(int &a,int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void Show(vector<int> & vec)
{
vector<int> :: iterator it = vec.begin();
for(it;it != vec.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
int Quick_one(vector<int> & vec,int low,int high)
{
int tmp = vec[low];
while(low < high)
{
while(low < high && vec[high] >= tmp)
{
high--;
}
vec[low] = vec[high];
while(low < high && vec[low] <= tmp)
{
low++;
}
vec[high] = vec[low];
}
vec[low] = tmp;
return low;
}
void QuickSort(vector<int> & vec,int low,int high)//时间复杂度O(nlogn) 空间复杂度O(logn) 不稳定
{
int pivot;
if(low < high)
{
pivot = Quick_one(vec,low,high);
QuickSort(vec,low,pivot - 1);
QuickSort(vec,pivot +1,high);
}
}
int main()
{
int arr[10] = {10,9,8,7,6,4,5,2,1,3};
vector<int> vec(arr,arr+10);
Show(vec);
QuickSort(vec,0,vec.size()-1);
Show(vec);
}
相关推荐
【数据结构】七大排序之快速排序详解(挖坑法快排,非递归快排,二路快排,三路快排)
用Java实现快速排序:挖坑法快速排序(递归),非递归快排,二路快排,三路快排
全网最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排
快速排序(Quicksort)由英国计算机科学家Tony Hoare于1959年发明,是一种经典的排序算法,被广泛应用于计算机科学领域。快速排序(Quick Sort)是一种常见的基于比较的排序算法,也是最常用的排序算法之一。快速排序是一种稳定性:如果a原本在b前面,并且a=b,排序之后a仍然在b的前面,那么就成这个算法是稳定的,否则就是不稳定的;以下是快速排序的基本思路选择一个基准元素(pivot)。将序列中所有小于基准元素的元素放在基准元素的左侧,所有大于基准元素的元素放在右侧。递归地对基准元素左侧和右
快排:经典快排、随机快排
快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 时间复杂度 当数据有序时,以第一个关键字为基准分为两个子序列,前...
快速排序 详解(快速排序 双路快排 三路快排)
注:内容,图片来自于慕课网liuyubobobo老师的课程。 快速排序 快速排序可以说是20世纪最伟大的算法之一了。相信都有所耳闻,它的速度也正如它的名字那样,是一个非常快的算法了。当然它也后期经过了不断的改进和优化,才被公认为是一个值得信任的非常优秀的算法。 c++中algorithm中的sort一般都是用的快排(在快排恶化的情况下才会转换成其它的排序)。 核心思想:分治 ...
【排序算法】——图解双轴快排(建议收藏)
原创公众号:「bigsai」,转载需注明出处 关注回复bigsai领取Java进阶pdf,回复进群加入力扣打卡群(目前200+). 觉得不错还请一键三连! 前言 在排序算法中,快排是占比非常多的一环,但是快排其思想一直被考察研究,也有很多的优化方案。这里主要讲解双轴快排的思想和实现。 首选,双轴快排也是一种快排的优化方案,在JDK的Arrays.sort()中被主要使用。所以,掌握快排已经不能够满足我们的需求,我们还要学会双轴快排的原理和实现才行。 回顾单轴快排 单轴快排也就是我们常说的普通快速排序,对.
STM32Cubemx-H7-17-麦克纳姆轮驱动
我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。
『算法』——Python之快速排序算法(单路快排、双路快排、三路快排)
快速排序1、单路快排1.1 普通单路快排1.2 随机单路快排2、双路快排3、三路快排 1、单路快排 \quad \quad单路快排即快速排序。 \quad \quad快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 1.1 普通单路快排 基本思想: 1): 从序列中挑出一个元素作为"基准"元素,一般是该序列的第一个元素或者是最后一个元素。 2): 把序列分成2个部分,其数值大于"基准"元素的元素放在"基准"元素的左边,否在
C#:WPF格式转Winform格式
WPF格式转Winform格式
快排优化:随机快排、双路快排、三路快排
排序算法名称 针对的应用情景 快速排序 无序素组(对于基本有序数组和大量重复键值的数组复杂度上升至O(n2) 随机速排 快速排序的优化,解决普通快排在部分有序数组中进行排序,每次取得的都是趋近最值 二路快排 随机速排的优化,解决数组中存在大量键值重复的情况以及基本有序数组 三路快排 二路排序的优化,把等于value的元素放在另一个区间内,不参与下次的排序。 快速排序...
Polyworks脚本开发学习笔记(一)-脚本开发环境
详细的总结和记录了利用Polyworks进行脚本开发的一些方法和心得
【ArcGIS Add-in编程】如何创建ArcMap的下拉菜单插件
step1. VS2010中创建一个空的解决方案step2.创建一个项目 直接点击finish。step3 为该项目创建项目,选择Menu,作为根菜单,而后修改xml中的items项,添加需要放在下拉菜单中的项目,例如一个按钮; step4 现在可以创建项目,作为菜单中的项目。为该项目添加新的项目,选择button 此时 xml文件中,多了该button的项目,将该项目添加到items
三路快排(基于三指针单趟排序的快速排序)+快排时间复杂度再分析
快速排序终章
新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置
一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。
Java快速排序--原始快排、二路快排、三路快排及三路快排优化
快速排序–原始快排、二路快排、三路快排、三路快排优化 思路:在原始数组中找到一个区分点,然后遍历数组将大于区分点的元素放置区分点右边,小于等于区分点的元素放置区分点左边,每当发现比基准值小的元素就放在基准值左边,大于等于时放在基准值右边。当结束一次遍历时,基准值元素一定在最终位置。按照基准值左边与右边待排序数组重复上述过程。 快排整体思路图解: 快排具体执行过程图解: 快速排序源代码: imp...
[QMT量化交易小白入门]-七十九、增加标的后,五年回测收益率达到了2493%
本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。
SolidWorks2020详细步骤安装教程
1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;
快排优化之 二路快排、三路快排(重点)
二路快排: 不管当条件是大于等于还是小于等于v,当数组中重复元素非常多的时候,那么就将数组分成了极度不平衡的两个部分,因为等于v的部分总是集中在数组的某一边。此时快排的时间复杂度再次退化为O(n^2)级别。 其中一种优化的方式便是进行双路快排。 和单路快排不同的是此时将小于v和大于v的元素放在数组的两端,那么将引用新的索引j的记录大于v的边界位置。 如图: i索引不断向后扫描,当i的元素小于v的...
YOLO11涨点优化:卷积魔改 | DCNv2升级版本,助力检测
在DCN的基础上,增加了2个创新点,分别是调制模块和使用多个调制后的DCN模块,从形成了DCN的升级版本——DCNv2
浅谈百度SEO快排是什么、原理、如何判断及应对
更多写作与参考学习材料等可登录ZG文库网http://www.zgwenku.com/下载。 前言:以前我说过不准备写这个快排,一是我自己的网站没有操作过所谓的快排 ,二是我并不能像网上很多写的揭秘百度快排(说实话,你都能揭秘的方法了,还真的很有用吗?真正懂的人都在低调赚money)。我只是站在一个小白角度,让更多小白了解下所谓百度快排是什么,以及同行网站是否使用了所谓快排技术,我们自己又...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
java 快排算法详解,java 快排代码
上面的公式是快排大小计算公式,但是在实际应用中,快排并不是按这个公式来计算的,因为如果按照这个公式来计算,那么在判断数组是否小于或者等于两个元素时,我们要先判断一个数组的元素是否大于或者等于两个元素,然后再判断数组元素是否小于或者等于两个元素。在 Java中,快排的时间复杂度是O (1),但是在其它编程语言中,快排的时间复杂度可能会更高一些。快排是一种线性排序,也就是说,快排是按照关键字(key)进行排序的,即:当数组中的关键字小于数组中的元素时,我们就将数组中的关键字加到这个数组的前面;
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
快排2-经典快排和荷兰国旗快排
基础知识见:https://blog.youkuaiyun.com/songsong2017/article/details/85615470 《建议先阅读基础知识,并自己手推一遍》 1 经典快排 算法原理: 第一步:取数组最后一个数作为num,将数组中的 <= num的数放在数组的左边,> num的数放在数组的右边,这是可以理解为分成了两个数组; 第二步:然后将 <= nu...
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
【数据结构】快排的详细讲解
详细介绍了快排的原理,思想,结构,并详细说明了快排中三大核心的预排序:普通法,挖坑法,前后指针法,讲解了将其如何运用,以及如何运用,最后分析了快排的不足之处,将其算法进行改善
一文详解“分治—快排“在算法中的应用
本文针对快排进行了优化,并在此基础上使用LeetCode上部分相关的题目来练习
揭秘seo快排原理,seo快排流量
众所周知,最近几年互联网行业一直是在风口浪尖,每个站长都在不断的想办法收割流量,在互联网这个领域,当然,最值钱的也还是流量,你网站有流量哪怕你卖矿泉水都会赚到钱,这就是流量所带来的收益。而搜索引擎也一直占据着互联网这个领域的半壁江山。于是乎在短短几年时间就出现了千千万万的网站,但是很多的网站虽然看上去很华丽,内容很丰富,也能够突出自己的网站是做什么的,但是,网站却没有很好的排名,甚至没有用户访问。这也是众多站长们比较头疼的一个问题。 其实想让网站有流量的话一般有以下几种渠道获取; 1 通过品牌词获取流量 通
快速排序及优化(从单路快排到三路快排)
单路快排 核心思想(partition) 选取一个元素作为基准值,将小于基准值的元素放在基准值左边,将大于或者等于基准值的元素放在基准值右边。然后采用分治加递归的方式对处理子数组,直至数组不能再划分。 主体代码: private static void quickSort(int[] arr,int l,int r){ if(l &gt; r){ return; }...
数据结构| |快速排序,二路快排,三路快排
快速排序、二路快排、三路快排 1. 快速排序 1. 概念 快速排序采用分治的思想对数据进行排序 选择一个基准值 将比基准值小的放在基准值的左边,其余的(大于或者等于)放在右边 然后再对左边和右边继续进行划分,直到划分的区间长度为1 2. 时间复杂度 快速排序划分区间的时候为O(logN),每次都需要时间复杂度为O(N)进行排序 所以快排的时间复杂度是O(Nl...
2119



被折叠的 条评论
为什么被折叠?



