用C / C++ 实现快速排序

Windows系统下LaTeX环境搭建与编辑器配置全攻略 本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。 阅读详情

快速排序可以说是最高效的排序算法,其原理如下:

假定有一个数列:3 2 4 6 7 9 8

我们定义两个标记left和right,再定义一个key,key用于保存要进行操作的数值,left和right用于确定范围,是下标。

现在left为0,right为6。注意过程中right > left

一开始令key等于left对应的值3

key = 3  3 2 4 6 7 9 8 现在让right从右往左找到第一个比key小的值,我们找到的值是2,left的值仍为0,right现在指向2,值为2的下标1,left = 0,right = 1

找到后把left对应的值变成right对应的值,之后数列变成了:

key = 3 2 2 4 6 7 9 8 然后再让left从左往右找到第一个比key大的值,我们在right > left 的情况下并没有找到,所以把key的值赋给left对应的值,数列变成了:

key = 3 2 3 4 6 7 9 8 此时3的左边的值都小于3,3的右边的值都大于3,你们可以自己随便写一列数,按照上面的方法操作一次,结果都是这样的。

让后再把区间按key的位置分成左右两部分,分别重复如上操作,便可将其从小到大排序。

代码如下

/*
功能:自定义函数实现快排 
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
vector<int>num;
void QuickSort(vector<int> &num,int left,int right)
{
	if(left<right)//当left>=right时排序完毕
	{
		int key=num[left];//key保存left对应的值
		int low=left;//临时变量保存左右区间的端点值
		int high=right;
		while(high>low)//当low=high时结束查找
		{
			while(high>low&&num[high]>key)high--;//right从右往左找第一个比key小的值
			num[low]=num[high];//赋值
			while(low<high&&num[low]<key)low++;//left从左往右找第一个比key大的值
			num[high]=num[low];//赋值
		}
		num[low]=key;//将当前下标的值赋为key,此时low左边的值均小于key,右边的值均大于key
		QuickSort(num,left,low-1);//对左右两个区间再次排序
		QuickSort(num,low+1,right); 
	}
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		num.clear();
		int x;
		for(int i=0;i<n;i++)//读入一个长度为n的数列,存在num中
		{
			scanf("%d",&x);
			num.push_back(x);
		}
		QuickSort(num,0,n-1);//快排,此时left=0,right=n-1
		vector<int>::iterator it;
		for(it=num.begin();it!=num.end();it++)//输出
			printf("%d ",*it);
			printf("\n");
	}
	return 0;
}



Android 12.0 系统开机设置默认横屏显示 在12.0的系统产品开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从两部分来实现,一部分是开机动画横屏显示,另一部分是系统显示横屏显示,从这两方面就可以做到开机默认横屏显示了。 阅读详情

相关推荐

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 749

C++快速排序(二)

引言 此文继上一次的c++快速排序之后,是时隔一年后的重新领悟。快速排序就是从一列序列中选择一个数作为基数,一般以左边第一个元素为基数,然后定义两个变量left与right,left指向左边第一个元素,与基数指向相同,right指向右边倒数第一个元素,从右侧开始移动right找到比基数小的元素,然后从左侧开始找到比基数大的元素,将右侧比基数小的元素与左侧比基数大的元素,即left与right指向的元素交换位置,再继续从右边开始移动right找出比基数小的元素,移动左边的left找到比基数大的元素,交换rig

肩上风骋的博客 588

Android音频混音器AudioMixer实战:从多路输入到设备播放的完整流程解析

本文深入解析了Android平台上音频混音器AudioMixer的完整工作流程,涵盖从多路音频输入、轨道创建与配置、AudioBufferProvider数据源接入,到核心混音处理与最终设备播放的全过程。文章重点探讨了如何高效管理音频数据流、配置音量与重采样参数,并提供了缓冲区管理与性能优化的实战技巧,帮助开发者构建稳定、低延迟的音频应用。

l3m4n的博客 341

Java/C++实现快速排序

快速排序是一种很常见的排序算法(面试题),不但为了教学目的,即便在实际工作中也会用到很多。时间复杂度为 O(n logn)。算法使用了分治策略。在实现上采用递归调用。主要步骤有:1.选择pivot比对值,2.划分(partition),3.递归排序

一介蚍蜉的博客 326

从Oracle迁移数据到Hadoop

目标:把Oracle 下的数据文件迁移到 Hadoop , 数据表都是上亿条,每个数据表的空间都超过100G。 关键是建立数据文件是UTF8格式,这样数据中的汉字在Hadoop 里显示才正常。 平台:CentOS 6.10 工具:Python 2.7 cx_Oracle 库 Oracle10.2.0.4.0 Hadoop 2.7.2-transwarp-5.2.1 1. 查看表...

预则立 4233

baostock实战:如何用Python批量下载多只股票的历史数据(含常见错误排查)

本文详细介绍了如何使用Python和baostock库批量下载多只股票的历史数据。内容涵盖从环境搭建、代码标准化到构建稳健的批量下载框架的全过程,并重点提供了高级错误处理、网络重试、数据验证及内存管理等实战解决方案,帮助用户高效构建股票数据处理流水线。

nice1的博客 1081

我写的一个 C++ 快速排序算法

这几天在读程杰的《大话数据结构》,上面有介绍快速排序算法。关于排序算法一直没有下功夫研究过,全都是用现成的,这次花了点时间自己动手写了写,顺便也检验了自己对 C++11 的掌握程度。 快速排序原理上很简单,一个数组分成前后两部分,保证前边的数都比后面的小。之后递归的再这么分下去就行了。 下面是代码,首先需要一个能交换两个元素的 swap 函数,这个 swap 用到了 C++ 11 的 auto...

Ivan 的专栏 1379

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

C++实现快速排序(源代码)

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种

liuchen1206的专栏 18万+

字节系,ali系,ks,pdd最新抓包方案

各大厂安卓逆向

qq_38759383的博客 1145

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2956

快速排序的C++实现

快速排序是一个不稳定的排序算法,它的基本思路是:每次排序时设置一个key值,使待排序的数组每完成一次排序,key值左边的子数组中的元素都比key小,右边的子数组中的元素都比key大;接下来再分别对key左右两边的子数组进行上述的排序操作,直至每个子数组都完成了排序。快速排序中利用到了递归的思路。 在具体实现时,每次排序时设置第一个元素为key,先从数组最后往前面遍历,找到第一个比key小的元素替

del_nasay的博客 582

字符串尾部空格的迷思:深入解析 ABAP 隐式转换规则与 `strlen` 意外结果

看似简单的strlen之谜,背后实则是 ABAP 隐式转换的一整套严谨规则。只要开发者在赋值、输出、接口映射等关键节点建立“尾部空格意识”,辅以CONVCONDENSE等显式手段,就能有效杜绝多余空格引发的链式故障。希望本文的拆解与案例,能让你在面对下一个“异常长度”时,从容而笃定地给出正确答案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 430

C/C++实现快速排序

快速排序 - (类似于选择排序的定位思想)选一基准元素,依次将剩余元素中小于该基准元素的值放置其左侧,大于等于该基准元素的值放置其右侧;然后,取基准元素的前半部分和后半部分分别进行同样的处理;以此类推,直至各子序列剩余一个元素时,即排序完成(类比二叉树的思想,from up to down) 时间复杂度:O(NlogN)   稳定性:不稳定 /*快排*/ void quickSort(vector...

听风雨 285

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

快速排序算法之所有版本的c/c++实现

<br /><br />十二、快速排序算法所有版本的c/c++实现<br /><br />作者:July、二零一一年三月二十日。<br />出处:http://blog.youkuaiyun.com/v_JULY_v。<br />--------------------------------------------------<br /> <br />前言:<br />    相信,经过本人之前写的前俩篇关于快速排序算法的文章:第一篇、一、快速排序算法,及第二篇、一之续、快速排序算法的深入分析,各位,已经对快速排序算

zcjrun的专栏 1935

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

递归实现C/C++快速排序

//从小到大排序 //快排思路: 选定一个基准值,将比基准值大的放在基准值右边,小的放在基准值左边。然后通过递归来讲序列的长度继续划分为左右两边,等到最后只剩两个元素的时候交换排序,不断递归到上一层 进行排序。感觉和归并排序有点像,最后都是分为两个元素。 时间复杂度大概是O(nlogn), 空间复杂度:O(logn) 稳定性:快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法 //二分查找:原理是对一个顺序的数列arr(lo,hi),从数列中间(mid)开始,中间元素arry[mid]与想要

qq_43038236的博客 531

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

快速排序算法所有版本的c/c++实现

<br /><br />          十二、快速排序算法所有版本的c/c++实现<br /><br />作者:July、二零一一年三月二十日。<br />出处:http://blog.youkuaiyun.com/v_JULY_v。<br />--------------------------------------------------<br /> <br />前言:<br />    相信,经过本人之前写的前俩篇关于快速排序算法的文章:第一篇、一、快速排序算法,及第二篇、一之续、快速排序算法的深入分析,各

Peter的专栏 3330

重温经典排序算法之快速排序——图解+C/C++实现

目录1.快速排序原理2.算法性能分析(1)时间复杂度(2)算法稳定性3.图解分析4.C/C++实现 1.快速排序原理 对于要排序的数组,首先任意选取一个数据(通常为首元素)作为关键数据,将序列中所有比该元素小的元素都放到它的左边,将所有比它大的元素都放到它的右边,再对左右两边分别用同样的方法直到每一个待处理的序列长度为1,排序结束。 2.算法性能分析 (1)时间复杂度 a.最好情况的时间复杂度:每...

SAMSARA的博客 7087

C/C++面试题:编程实现快速排序

C/C++面试题:编程实现快速排序 考点:快速排序算法的实现 出现频率:★★★★ 解析: 源代码如下: void quick_sort(int a[], int low, int high) { int i, j, pivot; if (low < high)...

weixin_34417200的博客 231

C语言/C++实现快速排序

本文介绍了快速排序的原理、性质以及具体的C语言/C++代码实现。

weixin_55431729的博客 432

C/C++ 实现在快速排序Quick Sort中的三种分区方式

神说, 要有光. 于是就有了光. 神说要有快排, 于是就有了快排.快速排序Quick Sort的发明者 托尼 霍尔 是1980年的图灵奖得主. 快速排序就是他发明的. 当时发明的背景是: 由于霍尔要高效地对俄语词汇进行排序以优化翻译程序, 而当时的排序算法(如冒泡, 插入排序)效率较低, 平均时间复杂度为 O(n2). 霍尔驾驶室分治法 (Divide and Conquer)思想启发, 提出了基于 "分区" (Partition) 的递归排序方法. (这段AI获取)

losangelx的博客 1147

链表的快速排序(C/C++实现)

快速排序的是交换排序其中的一种,主要是采用分治的思想,每次迭代在当前区间中选取一个数作为哨兵,通过一系列的交换操作将当前区间分为左区间和右区间【使得左区间的值全部小于等于哨兵,右区间的值全部大于等于哨兵】。然后再对左区间、右区间执行这种划分区间的策略操作,当区间的长度为1时停止。等到所有分治的区间长度都为1时,此时的原数组就已经是一个排好序的数组了。// 当前区间的长度小于等于1时停止循环// 创建哨兵 mid// 创建i,j指针进行移动。

suhuamo的博客 2793

十二、一之再续:快速排序算法之所有版本的c/c++实现

十二、快速排序算法所有版本的c/c++实现 作者:July、二零一一年三月二十日。出处:http://blog.youkuaiyun.com/v_JULY_v。-------------------------------------------------- 前言: 相信,经过本人之前写的前俩篇关于快速排序算法的文章:第一篇、一、快速排序...

dinongxu8804的博客 110

十二之再续:快速排序算法之所有版本的c/c++实现

原作者地址:http://blog.youkuaiyun.com/v_JULY_v/article/details/6262915    十二之再续、快速排序算法所有版本的c/c++实现 作者:July、二零一一年三月二十日。 出处:http://blog.youkuaiyun.com/v_JULY_v。 --------------------------------------------------

qingyuanluofeng的专栏 609

c/c++实现快速排序

快速排序算法实现,代码注释即为算法说明 #include <iostream> using namespace std; //自定义实现交换算法 void _swap_(int& x, int& y) { int tmp = x; x = y; y = tmp; } /* 以datas[left]为基准找的位置r,并进行初步排序,使得r左边的数据都小于...

yanhaiming56的博客 265

快速排序(伪代码 c/c++ python 实现)

快速排序(伪代码 c/c++ python 实现)

见证序号的点滴进步 5702
上一篇: HDU1823-二维线段树
下一篇: KMP基础模板- - -看了很多人的模版,总结一下
P_rogrammer
博客等级 码龄12年 0粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值