排序基础-快排三路快排

news/2024/11/7 11:00:54/

三路快排

1. 回忆快排

快排的核心思想是,每次选取一个基准值,然后将数组分成两部分,一部分小于基准值,一部分大于基准值,然后递归处理这两部分。


class Solution:# 快速排序def paviot(self,nums:List[int],lo:int,hi:int):# 随机选取一个值作为pivot,避免退化为O(n^2)         i = random.randint(lo,hi) nums[i],nums[hi] = nums[hi],nums[i] pivot = nums[hi]less = great = lowhile(great < hi):if nums[great] < pivot:  # 如果当前值小于pivot(pivot为最后一个值)nums[less],nums[great] = nums[great],nums[less] # 如果存在大量重复值,这里会导致大量交换,导致超时less += 1great += 1nums[less],nums[hi] = nums[hi],nums[less]return lessdef quickSort(self,nums:List[int],lo:int,hi:int):if lo > hi:returnindex = self.paviot(nums,lo,hi)self.quickSort(nums,lo,index-1)self.quickSort(nums,index+1,hi)def sortArray(self, nums: List[int]) -> List[int]:self.quickSort(nums,0,len(nums)-1)return nums
  • 快排在处理大量重复值的时候,会导致大量的交换,导致超时。
  • 如果数组本身就是有序的,那么快排的时间复杂度会退化到O(n^2)。

2. 三路快排

三路快排的核心思想是,每次选取一个基准值,然后将数组分成三部分,一部分小于基准值,一部分大于基准值,一部分等于基准值,然后递归处理这三部分。

相比于快排,三路快排在处理大量重复值的时候,不会导致大量的交换,因此不会导致超时。


from cn.Python3.mod.preImport import *
import random
# @test([5,2,3,1])=[1,2,3,5]
# @test([5,1,1,2,0,0])=[0,0,1,1,2,5]
class Solution:# 三路快排def threeway_quick_sort(self,nums:List[int],lo:int,hi:int):if lo >= hi:returnj = random.randint(lo,hi)nums[j],nums[hi] = nums[hi],nums[j]pivot = nums[hi]i = loless = logreat = hiwhile(i<=great):if nums[i] < pivot:nums[i],nums[less] = nums[less],nums[i]less += 1i += 1elif nums[i] > pivot:nums[i],nums[great] = nums[great],nums[i]great -= 1else:i += 1self.threeway_quick_sort(nums,lo,less-1)self.threeway_quick_sort(nums,great+1,hi)def sortArray(self, nums: List[int]) -> List[int]:self.threeway_quick_sort(nums,0,len(nums)-1)return nums

http://www.ppmy.cn/news/634412.html

相关文章

送外卖、开快车、卖保险……30多岁失业的程序员,前路在何方?

最近有个话题又火起来了&#xff1a; 30多岁失业是一种什么样的体验&#xff1f; 很多自媒体大V上阵&#xff0c;描述了各行各业在30-35岁前后的职业走向&#xff0c;其中不乏程序员、软件工程师等等技术人。 于是&#xff0c;34岁送外卖的前程序员、38岁开滴滴快车的前代码狗…

选最快的3辆车

36辆车&#xff0c;6条跑道&#xff0c;没有计时器&#xff0c;最少跑几轮可以选出最快的3辆车——是2015年校园招聘之腾讯&#xff08;数据挖掘)笔试面试题目。 我的思路如下&#xff1a;首先这应该是多轮问题。 &#xff08;1&#xff09;初筛 36辆车分6组&#xff0c;每组6辆…

坐标中国|中国速度,挑战极限驱动发展“快车”

1秒5G时代下载数据超500兆1秒浮点运算次数超150000000兆次我国算力总规模居全球第二200秒“九章”量子计算原型机可求解5000万个样本的高斯玻色取样问题1小时C919可巡航约880公里1小时复兴号新型动车组&#xff08;单列&#xff09;行进435公里创世界纪录1小时高速磁浮交通系统…

【观察】赋能中小企业驶入成长“快车道”,华为云云商店背后的三重新价值...

众所周知&#xff0c;中小企业通常灵活多变、高效敏捷、嗅觉灵敏、目光超前&#xff0c;敢于逆风而行、勇于创新&#xff0c;一直是中国经济发展的关键推动力。数据也显示&#xff0c;截至2021年末&#xff0c;中小企业在全国企业中数量占比已超过99%&#xff0c;贡献了我国50%…

最强《Android车载开发指南》,助你踏上车企数字化的快车道

2022年9月中国汽车出口30.1万辆&#xff0c;同比增长73.9%&#xff0c;这是继8月份以来第二次单月超过30万辆。从今年前八个月整体情况来看&#xff0c;我国汽车出口量已超德赶日。而这其中&#xff0c;新能源汽车的出口贡献了非常重要的增量&#xff0c;智能化汽车的布局初显成…

快狗打车,打车新平台,这个猛!

「58速运」更名为&#xff1a; 新名字 新征程 为了提升用户体验、提高司机师傅的服务水平&#xff0c;58速运进行了战略升级&#xff0c;就有了这次品牌焕新&#xff0c;「58速运」更名为「快狗打车」。 为什么叫「快狗打车」 2017年&#xff0c;58速运和GOGOVAN合并&#xf…

趣头条进击:作者月保底收入3万,搅动内容创业的最后快车道

内容创业似乎已经从春天走到了冬天&#xff0c;原来的大好机会已经被今日头条、百度、腾讯、一点资讯等抢占了&#xff0c;留下来的发展空间正日趋收窄。但商业很有趣&#xff0c;当大家都在同一条笔直的赛道上疯狂飚速时&#xff0c;后入局者似乎很难看到希望。但也总会有聪明…

滴滴综合分析

1、发展历程 融资情况&#xff1a;滴滴成为了唯一一家腾讯、阿里巴巴和百度共同投资的企业。 2、公司架构&&业务体系 事业部制结构 同时滴滴打车共有八条业务线&#xff1a; 出租车业务、专车业务、快车业务、顺风车业务、公交业务、代驾业务线、试驾业务、租车业务&am…