非递归的快速排序

news2024/11/23 9:14:49

其实,我们快速排序还有一种更加快的方法就是不采用递归的方法,那就是非递归,所以这一篇文章我们就研究这个非递归到底怎么实现。

首先,我们先思考一个问题:递归的时候,我们存到栈里面的到底是什么?

以上图片简单模拟的是我们的递归过程,很直观地看出这个过程中,我们在栈里面存的是这个数组的区间,存的是区间! 所以,我们可以模拟这个存区间和递归的过程,那么什么可以让我们存区间,并且取出区间,而且还要模拟递归的过程,后进先出,就是。我们需要手动搭建一个栈,这个栈用来存储我们的区间,然后我们取出的区间就用来排序,再将我们排好序的这个区间又分为两个区间,这样就达到了非递归的效果,但是用到的是非递归的思想,是不是觉得很神奇。

这就是我们非递归手动搭栈的全过程,当我们的区间只有一个数的时候就不再进入栈了,开始将站里面的区间一一排序,这样就实现了。其实过程还是很简单的,但是这个思路很难想,所以需要我们去掌握,并且手撕代码。 

代码展示

//非递归快速排序
void QuickSortNonR(int* a, int left, int right)
{
	ST st;
	STInit(&st);
	STPush(&st, right);
	STPush(&st, left);
	while (!STEmpty(&st))
	{
		int begin = STTop(&st);
		STPop(&st);
		int end = STTop(&st);
		STPop(&st);
		int keyi = quicksort2(a, begin, end);
		//[begin,keyi-1]  keyi  [keyi+1,end]
		if (end > keyi + 1)
		{
			STPush(&st, end);
			STPush(&st, keyi+1);

		}
		if (keyi - 1 > begin)
		{
			STPush(&st, keyi-1);
			STPush(&st, begin);

		}
	}
	STDestroy(&st);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密码模块学习笔记(GMT0028)

GMT 0028-2014《密码模块安全技术要求》 GM/T 0028 四个安全等级 11个安全域:密码模块规格;密码模块接口;角色、服务和鉴别;软件/固件安全;运行环境;物理安全;非入侵式安全;敏感安…

学习3dMax需要多久才能从入门到高级3D建模师

学习3dMax需要多久才能从入门到高级3D建模师 学习3dMax从入门到成为高级3D建模师的时间因个体差异而不同,没有一个固定的时间框架。这取决于多种因素,包括你的学习能力、先前是否有相关软件或艺术的经验、投入的时间和精力、以及你学习的深度和广度。不过…

七夕送礼物首选:浪漫实用又出圈,有谁能拒绝?

七夕不知道送什么的看过来,那今天给大家安利一个女生收到都会疯狂爱上的节日礼物——华为FreeBuds Lipstick 2 口红耳机。既浪漫、时尚又实用高级,节日和生日、纪念日送都很合适。 外观包装:精致如她,一见倾心 为什么首选推荐这…

QListView实现自定义的控件展示(可以根据选中与否置顶展示)

文章目录 0 问题引入1、方案1:使用QListwidget自定义的widget1.1 效果1.1 思路 2、方案2:使用QListView自定义model自定义delegate2.1.浅谈2.2.实现 3、总结4、引用 0 问题引入 问题:有人问我如何实现上图的功能,当时我脑海里有了…

kerberos认证流程

kerberos 认证3步骤 1,生活场景 你进入某公司要见领导 首先第一次跟保安打交道,沟通完了,保安告诉你助理的办公室位置和一封信(你看不懂,助理看的懂) 2,你到了助理办公司,助理拿你的…

【LLM微调】Llama3.1-8B模型中文版!OpenBuddy发布新一代跨语言模型

简介: 7月23日,Meta发布了新一代开源模型系列:Llama3.1。其中405B参数的版本刷新了开源模型性能的上限,在多种指标上的测试成绩接近GPT-4等闭源模型的水平,甚至在部分基准测试中展现出来了超越头部闭源模型的潜力。 本…

折叠想象,「天池AI IP形象征集大赛」火热进行中!

天池十周年,我们诚挚邀请各路创作人才围绕「天池平台Al形象」进行创意施展,借助AIGC技术,创造属于天池的独一无二的Al IP形象。我们渴望见到充满“活力、创新、智能〞风格的Al IP设计浮出水面,它将成为天池平台的Al 官方形象&…

Python 中的 NotImplemented 和 NotImplementedError

前言 Python 中的 NotImplemented 和 NotImplementedError 很像,都用来表示没有实现的意思。它们具体有什么区别呢? NotImplemented NotImplemented 是 Python 中的一个特殊常量,注意它不是一个异常类,是一个值。所以它是用在 …

TCP 和 UDP 之间的区别?

从 连接,可靠性,传输方式等方面: TCP 是面向连接的协议,在发送数据的时候需要先通过 TCP 的三次握手,而 UDP 是无连接的协议,可以直接传输数据TCP 通过超时重传,流量控制和拥塞控制等方法保障了…

聚芯前行|美格智能亮相2024 ChinaJoy骁龙主题馆,展现数字娱乐的无限可能

7月26日,2024中国国际数码互动娱乐展览会(ChinaJoy)在上海新国际博览中心正式拉开帷幕。美格智能携手高通公司亮相骁龙主题馆,以5G-A毫米波MiFi解决方案及高算力AI模组,共同为广大玩家和粉丝打造了一个前沿技术赋能、充…

Vivo手机怎么录屏?教你操作,vivo手机完美录屏攻略

随着智能手机的普及,录屏功能成为了我们日常生活和工作中不可或缺的一部分。vivo手机作为一款备受欢迎的智能手机品牌,拥有着许多实用的工具和丰富的功能,其中包括强大的录屏功能。本文将为您详细介绍2种vivo手机怎么录屏的方法。无论您是想分…

找工作很迷茫?程序员的岗位宝典来了!

随着数字化转型进展深入,大量数字化、智能化的岗位相继涌现。 但即使这样,大家依然认为,找到一份合适的工作实在是太!难!了! 调查显示,技术创新和商业模式正在成为助推企业发展的两大动力。同时…

TOSHIBA东芝代理商--芯智雲城,提供订货、报价、选型等服务!

关于东芝 东芝创立于1875年7月,是日本大型半导体制造商,全球知名的综合机电制造商和解决方案提供者,世界大型综合电子电器企业集团。东芝集团原名东京芝浦电气株式会社,在1939年东京电器与芝浦制作所正式合并成为现在的东芝&…

想不到WhaleStudio和Talend的差异竟如此之大!

最近我们遇到很多客户需求是把Talend迁移到WhaleStudio,主要是发现WhaleStudio支持的数据源多很多,从各个版本的SAP到AWS Redshift,S3,从MangoDB CDC到 Neo4J甚至各种国产信创数据源,可谓应有尽有。同时,客…

ROC曲线的一点理解

1 背景知识 真阳率(TPR)和假阳率(FPR): 真阳率(TPR):又称召回率(Recall),计算公式为 ​,表示实际为正的样本中被正确分类为正的比例…

STC12C5A60S2单片机输出pwm的方法

所谓的pwm输出就是让单片机在某个管脚上按照时间输出特定频率和占空比的矩形方波。这里面有两个参数,一是频率,二是占空比。两者互不干涉。以STC12C5A60S2为例子,本51型单片机可以有两路pwm输出。以其中的一路为例说明; 首先说频…

专题八_分治-归并

目录 912. 排序数组 解析 题解 LCR 170. 交易逆序对的总数(数组中的逆序对) 解析 题解 315. 计算右侧小于当前元素的个数 解析 题解 493. 翻转对 解析 题解 912. 排序数组 912. 排序数组 解析 题解 1.局部临时数组 class Solution { public:vector<int> so…

换地不换IP?揭秘微博IP地址的奥秘

在这个信息飞速传递的时代&#xff0c;社交媒体成为我们生活中不可或缺的一部分。微博&#xff0c;作为其中的佼佼者&#xff0c;不仅是我们获取资讯的重要渠道&#xff0c;也是展现自我、分享生活的重要平台。然而&#xff0c;你有没有遇到过这样的情况&#xff1a;明明已经换…

智能相机背后的图像防抖(IS)技术介绍

智能相机背后的图像防抖(IS)技术介绍 在现代摄影和视频拍摄中&#xff0c;防抖技术已成为必不可少的一部分。随着智能手机、相机和其他成像设备的普及&#xff0c;防抖技术的需求也越来越高。本文将详细介绍几种主要的防抖技术&#xff0c;包括光学防抖&#xff08;OIS&#x…

【Redis 初阶】客户端(C++ 使用样例列表)

一、编写 helloworld 需要先使用 redis-plus-plus 连接一下 Redis 服务器&#xff0c;再使用 ping 命令检测连通性。 1、Makefile Redis 库最多可以支持到 C17 版本。&#xff08;如果是用 Centos&#xff0c;需要注意 gcc/g 的版本&#xff0c;看是否支持 C17。不支持的话&a…