分享好友 最新动态首页 最新动态分类 切换频道
数据结构——快速排序的三种方法和非递归实现快速排序
2024-12-25 12:38

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中
的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右
子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

 
 
 
 
 
 
 
 

函数形参分别为待排序数组a,待排序数组的最左边数的下标left,待排序数组的最右边数的下标right。

 
 
 
 
 
 
 
 

当快排递归到待排数组是一些短数组的时候,由于短数组的个数很多,再加上这些短数组都需要递归到数组中只有一个数的情况才可以返回,这时候会不断的创建函数栈帧,然后导致时间复杂度降低。因为这些待排的短数组都是一个接近于有序的的数组,用直接插入来优化更为合适。
代码实现

 
 

任何一个递归程序在执行的时候,都是操作系统底层开辟了一个栈,每执行一个函数调用,那么就将当前函数的栈帧压栈,如果当前函数内部存在递归调用,那么就继续压入新的该函数代表的栈帧,直到某个函数内部没有再进行递归调用,该函数计算完毕后,将其出栈,并将计算结果返回给下一层栈帧。所以我们可以尝试着自己手搓一个栈,来实现函数的非递归调用。

要点1:我们要明白函数栈桢中存放的是什么,存放的是数组区间
要点2:数组区间只有一个值或者不存在值得时候不入栈

思路:首先将数组得左右下标压入栈中,这里注意顺序,栈得性质得后入先出,所以先将right压入栈中,在将left压入栈中,接下来相当于创建了函数栈桢,然后开始调用函数,因为递归函数中是不断得调用同一个函数,但是函数栈桢中得数组区间不同,所以接下来要通过循环来反复调用单趟排序,并且在循环中重复定义数组区间得值,调用完单趟排序后将子区间压栈,要判断一下数组区间至少有两个元素。
代码实现


最新文章
安卓获取不到gpu名字
目录GPU技术支持-业务篇-显示异常问题排查前言概述排查思路基本状态确认个例or共性问题验证措施-对换验证中间层状态判断验证措施显卡配置状态验证措施常见问题排查无显示问题(黑屏)确认系统状态判断显卡状态确认EDID状态、确认显示接口状
seo网站推广费用
SEO网站推广费用因多种因素而异,包括网站的规模、目标关键词的竞争程度、推广策略的选择等。SEO推广费用可以从几千元到数万元不等。具体而言,费用可能包括专业SEO团队的服务费、关键词优化费用、网站内容更新与维护费用等。选择合适的SEO
外卖一份面收入5块5:代运营治不了小餐饮的窘迫
  外卖代运营可能是伪商业模式。   王先生觉得,外卖平台并没有让生意变得好做一点。   2019年10月,他和家里人在深圳开了家主营粉面的快餐店。店铺还在装修的时候,美团外卖运营人员就找上门来谈合作,他接入了美团外卖。可只把店铺
共享汽车的使用费用如何计算?
共享汽车的使用费用计算方式挺多的。像一度,无需押金,按分钟和公里付费,2 块 1 公里,2 毛一分钟,结束后从信用卡扣钱。有车也是无需押金,1.5 元/公里加 0.15 元/分钟。驾呗同样无需押金,6 小时内 0.25 元/分钟,6 小时后 0.1 元/分钟
好视通云会议
  使用好视通云会议时大家听主会场发言,其他人都能听到,我听不到是怎么回事?  请您根据提示进行排查,请您在我们客户端主界面点击一下“音频”,然后请点击弹框里第一项“测试扬声器”,请您听一下,是否可以听到一段音乐声呢?  
排列五开奖结果第2021160期 一等奖中出53注
  今天是2021年06月19日,中国体育彩票排列五迎来了第2021160开奖时刻,小编昨天花了100块大洋买了直选大复式号,能否搏个1000万。我一直在想,如果中了1000万,怎么办?  彩种:体彩排列五(排列五)  期号:2021160期  开奖日期
香港特马资料免费大全赢钱买什么,关于香港特马资料免费大全赢钱买什么的问题,我必须首先指出,任何涉及赌博的行为都是违法的,并且存在极高的风险。赌博不仅可能导致财务损失,还可能对个人的心理、家庭和社会关系
摘要:关于香港特马资料免费大全赢钱买什么的问题,提醒广大市民,任何涉及赌博的行为都是违法的,存在巨大风险并可能导致严重后果。赌博不仅损害个人财务,更可能破坏心理、家庭和社会关系。强烈建议远离赌博,遵守法律法规,保护自身安全
数据结构实验四在线等价类排序输出
使用模拟指针实现本实验。输入一个1-9的正整数n,代表要创建n个元素,例如输入5,则代表创建一个1,2,3,4,5组成的元素表。再输入一个大于0正整数r,代表后面要输入r个等价关系。分行输入r个等价关系,格式如(
Python爬虫系列-获取每天黄金价格(编写爬虫的过程和编写代码思路详细解析)
        最近因为经济形势不好,黄金这样的硬通货价格持续走高,而且现在已经到了相当之高的程度。介于理财投资的低迷,黄金的长期投资说不定可以跑赢通胀。对于我们新手的投资,本着低买高卖的原则,总不会亏太多
【夜读】提升自己最好的方式
高度专注生活中,不管是哪个领域的高手,往往都是非常专注的人。做事总是东一榔头西一棒槌,或是频繁被琐事牵绊住心神,很难把一件事做好。把有限的精力放在重要的事情上,才有可能充分发挥自己的潜能。拥有专注力,是一个人走向优秀的开始
相关文章
推荐文章
发表评论
0评