排序:非递归的快排

目录

非递归的快排:

代码分析:

代码演示:


非递归的快排:

众所周知,递归变成非递归,而如果还想具有递归的功能,那么递归的那部分则需要变成循环来实现。

而再我们的排序中,我们可以采取栈的方式,用入栈、出栈、栈是否为空来完成递归的部分。

如图所示,这是序列分割时的图片,我们可以将一段序列的最左端下标和最右端下标丢入栈内,随后赋予临时变量之后出栈,然后利用临时变量组成的区间将序列进行一次的快排

快排结束返回key值,再根据key值继续划分序列,并且再度传入序列的最左端和最右端下标入栈随后立马赋予临时变量然后出栈,这样用入栈和出栈来控制循环。

代码分析:

这串代码的本质是利用了栈的后进先出的原理,以及二叉树后序遍历的原理。

当一个元素入栈后立马出栈,只要序列不是只剩下一个元素,那么它会带入两个元素入栈。

而这入栈,同时也是一种遍历,如下代码所示,通过计算我们得知最开始是数组的前端后入栈,但是是先出栈,出栈后他会带着四个元素入栈,而后端的两个下标则是被压倒了栈底,直到前端不能再入栈了后端才会出栈并且带四个元素入栈。

代码演示:


相关推荐
美式请加冰2 分钟前
简单多状态问题
数据结构·算法·leetcode
计算机安禾6 分钟前
【数据结构与算法】第38篇:图论(二):深度优先搜索(DFS)与广度优先搜索(BFS)
数据结构·算法·矩阵·排序算法·深度优先·图论·宽度优先
佑白雪乐8 分钟前
<LeetCode>二叉树前/中/后/层遍历**递归&&非递归**
算法·leetcode·深度优先
汀、人工智能13 分钟前
[特殊字符] 第56课:在排序数组中查找元素的首末位置
数据结构·算法·数据库架构·图论·bfs·在排序数组中查找元素的首末位置
小O的算法实验室14 分钟前
2026年IEEE TASE,面对突发危险区域的基于强化学习的多无人机路径规划,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
AI科技星18 分钟前
全维度相对论推导、光速螺旋时空与北斗 GEO 钟差的统一理论
开发语言·线性代数·算法·机器学习·数学建模
ECT-OS-JiuHuaShan22 分钟前
科学的本来意义,是基于规范的共识逻辑,而非共识方法
人工智能·科技·学习·算法·生活
木子墨51628 分钟前
LeetCode 热题 100 精讲 | 动态规划进阶篇:最大子数组和 · 分割等和子集 · 最长公共子序列 · 打家劫舍 III
数据结构·c++·算法·leetcode·动态规划·力扣
li16709027033 分钟前
第十章:list
c语言·开发语言·数据结构·c++·算法·list·visual studio
Z1Jxxx40 分钟前
C++ P1150 Peter 的烟
数据结构·c++·算法