最新要闻
- 宗申新款电动车闪电侠发布:续航超200公里 仪表盘可手机投屏
- 环球观速讯丨丢失两年的手机半夜仍被人试图解锁 被系统远程拍下照片
- 网友吐槽快递派送延误 韵达总部:人手紧张正调配
- 《狂飙》蜚声海外 英国小伙们沉迷剧集无法自拔:竟被打斗画面吸引
- 今日热文:大货车实线变道 女子科三被别停挂科当场发飙
- 全球热消息:土耳其一城市震后被海水倒灌:汽车泡在水里
- 环球观焦点:漂浮在数万米高空 你见到的“不明飞行物”:很可能就是一只气球
- 一加Ace 2支持双频GPS:发布会上没讲 结果被很多网友误伤
- 【天天播资讯】太火爆!ChatGPT多次因访问量激增而宕机
- 要闻:14年了:“千年老二”微软终于有机会扳倒谷歌搜索
- 热消息:微星推出Cubi 5 12M迷你主机:仅0.66L、配备双网口
- 世界热点评!女生应聘被问是否单身!当事公司:要求单身正常 将起诉举报者
- 【全球时快讯】近50年来首次!日本沙滩惊现大量沙丁鱼 原因未知:开排核废水、也要大地震?
- 最新资讯:国产车开门红:1月比亚迪称王 大众沦落第三 合资腰斩
- 当前报道:自研指令集没有侵权MIPS 国产CPU龙芯赢了:摆脱官司
- 当前讯息:自燃车辆引燃邻车 损失谁来赔?法院释疑
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
快播:C和Python实现快速排序-三数中值划分选择主元(非随机)
一、快排基础
1.1 快排的流程
将数组A进行快速排序的基本步骤-quick_sort(A):
(资料图片仅供参考)
- 递归基础情况:如果A中的元素个数是1或0,则返回。
- 选取主元:取A中的任意一个元素v,作为主元(pivot)。
- 交换策略:将A-{v}即A中剩余元素,划分成两个不相交的集合(多重集)A1和A2,
- 递归处理:递归调用quick_sort(A1),再调用quick_sort(A2)
伪代码
可视化快排选取主元后,将原数组划分为:值小于等于主元的左子数组,值大于等于主元的右子数组。然后递归地对左右子数组进行上述操作,知道递归的基础情况直接返回子数组(递归调用的过程类似二叉树的前序遍历)。
比较基础的情况: 输入数组大小为3, 选取主元并划分后,左子数组和右子数组包含1个数,递归调用快排直接返回,此时已经是有序的。
1.2 主元选取
选取主元: 最优选取到输入数组的中位数,可以均衡进行递归处理。
1)如果直接选择输入数组的第一个元素,在输入数组是有序的情况下,那么将导致快排的最坏情况-平方复杂度。左边每次取一个最小数,每次划分的复杂度和长度成线性递减,但需划分N-1次
2)随机选取主元: 代价不小
3)三数中值分割法:返回Left, Center, Right三个数中的中位数作为主元,避免最坏情况
- 先让Left<=Center, Left<=Right(若已满足不用管,不满足则交换元素), 使Left是最小数;
- 那么只需要确定Center, Right的大小。直接通过交换,让Center<=Right, Center即中位数
这时,三数中的最小者被分配在A[Left],其小于pivot; 最大者被分配在A[Right], 其大于pivot。可以把pivot放在 A[Right - 1]并在分割阶段,将左右开始索引i=left, j=right-1(A[Right]已经划分好了)
Left和Right为输入数组的左右边界索引。
C语言实现主元选取
typedef int ElementType;void Swap( int *a, int *b ){ int t = *a; *a = *b; *b = t;}ElementType Median3( ElementType A[], int Left, int Right ){ int Center = ( Left + Right) / 2; if ( A[Left] > A[Center] ) Swap( &A[Left], &A[Center] ); /* 如果左大于中则交换,保证A[Left] <= A[Center] */ if ( A[Left] > A[Right] ) Swap( &A[Left], &A[Right] ); /* 如果左大于右则交换,保证A[Left] <= A[Right] */ if ( A[Center] > A[Right] ) Swap( &A[Center], &A[Right] ); /* 如果中大于右则交换,保证A[Center] <= A[Right] */ /* A[Left] <= A[Cetner] <= A[Right] */ Swap( &A[Center], &A[Right-1] ); /* 将Pivot藏到右边Right-1作为哨兵*/ return A[Right-1]; /* 返回实际主元值 */}
1.3 交换策略
元素的交换策略:左边找大于等于主元,右边找小于等于主元;
刚刚越界时i>=j, i元素 >= 主元, j元素 <= 主元, 两边已经交换好; i和right-1交换,即把主元和大于等于它的值交换。
快排实现-C
void Q_sort( ElementType A[], int Left, int Right ){ if (Right - Left <= 0) { return; } else { int i = Left; int j = Right - 1; ElementType pivot = Median3( A, Left, Right ); if (Right - Left == 1) return; for ( ; ; ) { while( A[++i] < pivot ); /* 从左边找个大于等于pivot的数 */ while( A[--j] > pivot ); /* 从右边找个小于等于pivot的数 */ if ( i < j ) Swap( &A[i], &A[j] ); /* 未越界,则交换 */ else break; } Swap( &A[i], &A[Right - 1] ); /* restroe pivot*/ Q_sort( A, Left, i - 1 ); /* from pivot to divid sort */ Q_sort( A, i + 1, Right ); } }void Quick_sort( ElementType A[], int N ){ Q_sort( A, 0, N-1 );}
二、Python版快排
class Solution: def sortArray(self, nums: List[int]) -> List[int]: def swap(nums, i, j): nums[i], nums[j] = nums[j], nums[i] def median3(nums, left, right): center = (left+right) // 2 if nums[left] > nums[center]: swap(nums, left, center) if nums[left] > nums[right]: swap(nums, left, right) if nums[center] > nums[right]: swap(nums, center, right) swap(nums, center, right-1) return nums[right-1] def quick_sort(nums, left, right): if right-left > 0: pivot = median3(nums, left, right) if right-left == 1: return i, j = left, right-1 while True: i += 1 while nums[i] < pivot: i += 1 j -= 1 while nums[j] > pivot: j -= 1 if i < j: swap(nums, i, j) else: break swap(nums, i, right-1) quick_sort(nums, i+1, right) quick_sort(nums, left, i-1) quick_sort(nums, 0, len(nums)-1) return nums
arr_len = 输入数组arr长度 = right -left + 1, 需要处理好基准情况:
- Case1: arr_len 小于等1时,直接返回(不处理了);
- Case2: arr_len =2时, 这时right - left =1,取到的pivot实际为arr[left], left = center, = right-1, 不需要也不能进入划分子数组阶段(会越界),而且通过median3已经将长为2的数组排序,故可在调用median3后直接当前递归程序;
- Case3: arr_len == 3,上述快排程序已经可以处理, 并可以进一步通过Case1结束递归;
- Case4: arr_len > 3: 进行快排程序,并通过Case1到3结束递归;
处理基准情况,当输入数组较小时,right - left > 5,直接调用内置排序或插入排序处理,避免进一步递归调用。相当于把更下层的递归调用,直接实现而不用快排实现(快排更慢)。
点击查看代码
def quick_sort(arr, left, right): if right - left > 5: pivot = mcedian3(arr, left, right) i = left j = right-1 while True: i += 1 while arr[i] < pivot: i += 1 j -= 1 while arr[j] > pivot: j -= 1 if i < j: swap(arr, i, j) else: break swap(arr, i, right-1) quick_sort(arr, left, i-1) quick_sort(arr, i+1, right) else: arr[left:right+1] = sorted(arr[left:right+1])
快排的主元选取和划分操作,可以衍生出减治-快速选择。
快播:C和Python实现快速排序-三数中值划分选择主元(非随机)
宗申新款电动车闪电侠发布:续航超200公里 仪表盘可手机投屏
环球观速讯丨丢失两年的手机半夜仍被人试图解锁 被系统远程拍下照片
网友吐槽快递派送延误 韵达总部:人手紧张正调配
《狂飙》蜚声海外 英国小伙们沉迷剧集无法自拔:竟被打斗画面吸引
今日热文:大货车实线变道 女子科三被别停挂科当场发飙
全球热消息:土耳其一城市震后被海水倒灌:汽车泡在水里
环球观焦点:漂浮在数万米高空 你见到的“不明飞行物”:很可能就是一只气球
一加Ace 2支持双频GPS:发布会上没讲 结果被很多网友误伤
【天天播资讯】太火爆!ChatGPT多次因访问量激增而宕机
程序员常用的6款效率工具,准时下班不是梦
世界看点:春节假期“清零”,任务管理飞项快速助你回到高效状态
全球最新:win10系统,软件不可用,无法调用摄像头
Linux内核跟踪和性能分析
要闻:14年了:“千年老二”微软终于有机会扳倒谷歌搜索
热消息:微星推出Cubi 5 12M迷你主机:仅0.66L、配备双网口
世界热点评!女生应聘被问是否单身!当事公司:要求单身正常 将起诉举报者
【全球时快讯】近50年来首次!日本沙滩惊现大量沙丁鱼 原因未知:开排核废水、也要大地震?
最新资讯:国产车开门红:1月比亚迪称王 大众沦落第三 合资腰斩
03-Pandas详解
今日热讯:ChatGPT能做什么?零基础教你免费使用ChatGPT和账号注册
当前速看:美团面试失败后,翻了两年前的面试题,发现根本不是一个难度的
当前简讯:Linux安装
Spring Boot发送GET/POST请求——RestTemplate的基本使用
当前报道:自研指令集没有侵权MIPS 国产CPU龙芯赢了:摆脱官司
当前讯息:自燃车辆引燃邻车 损失谁来赔?法院释疑
天天最新:基于 eBPF 的 Serverless 多语言应用监控能力建设
世界最新:构建亿级别的消息推送基础模型
全球热文:Linux开源工具之nethogs命令介绍
精选!COBOL教程_编程入门自学教程_菜鸟教程-免费教程分享
华硕发布新款Vivobook 13 Slate笔记本:Intel 7W超低功耗U
今日精选:3岁女童喊脚疼被确诊癌症晚期:神经母细胞瘤 儿童癌症之王
天天微速讯:剧版《三体》弹幕互动量破2000万!豆瓣涨至8.3分
【热闻】iPhone 15 Ultra狂堆料!价格可能贵出天际
环球热议:全球不足50人!宝鸡发现1例罕见黄金血型:比熊猫血更稀有
环球资讯:ASP.Net Core 教程_编程入门自学教程_菜鸟教程-免费教程分享
ChatGPT保姆级注册教程
group by 、concat_ws()、 group_caoncat()的使用
全球热头条丨Jedis那么低性能,还在用吗? lettuce时代开幕啦
热资讯!阿里IM技术分享(十):深度揭密钉钉后端架构的单元化演进之路
强震已致超7700人遇难!土耳其地震背后的人祸 建筑不达标、豆腐渣工程多
全球热议:全球首架国产大飞机C919首飞三亚 民航最高接待礼“过水门”接风
环球关注:iPhone 15 Pro系列拿到三星顶级屏幕!超出S23系列整整两代
全球消息!高级Excel教程_编程入门自学教程_菜鸟教程-免费教程分享
重点聚焦!Serverless 时代开启,云计算进入业务创新主战场
【天天报资讯】Go的参数是传值还是传引用问题
【环球聚看点】【踩坑记录】单测中@PostConstruct多次执行
免费无广告 微软电脑管家2.7公测版发布:任务栏被意外修改有救了
4599元!佳能EOS R50发布:329克超轻便 支持无裁切6K
天天信息:研发10几年、花费千亿:日本国产大飞机为何失败?就是畸形产物
全球微速讯:LV将涨价?国人排长龙抢购 买万元包像在赶集:世界首富曾感慨中国用户有钱
高级Excel图表教程_编程入门自学教程_菜鸟教程-免费教程分享
Apache ANT 教程_编程入门自学教程_菜鸟教程-免费教程分享
焦点播报:算法学习笔记(15): Trie(字典树)
今日讯!火山引擎 DataTester“智能发布”:覆盖产品研发、测试、上线全流程,一站式智能管理 A/B 实验
DB2教程_编程入门自学教程_菜鸟教程-免费教程分享
马斯克将于3月1日公布特斯拉宏图第三篇章 第二篇章已烂尾
世界观速讯丨国产车企1:1复刻几十年前的MINI外观专利 宝马抗议!结果判了
【独家焦点】真心没想到!五旬男子开车撞上护栏:只因刚割了双眼皮
全球热消息:全世界最后一只袋狼究竟是怎么死的?
民企第一只 京东仓储REIT上市:认购额超718亿元遭疯抢
当前视讯!C#(进制转换) NumberConversion
ChatGPT国内也能用吗?ChatGPT国内镜像站点分享给你们
微动态丨暴躁小钢炮!极氪X实车亮相:零百加速3秒级
环球微速讯:《仙剑奇侠传》《和平精英》梦幻联动:赵灵儿端枪吃鸡
啥身材都能包!真维斯连帽卫衣大促:日常100元 现价50到手
6年来苹果iPhone涨价近50% 还会继续涨 库克不怕没人买
《流浪地球2》导演郭帆:国产科幻片工业流程还是初级 吃饭都会出大错误
童话二分之一的大结局是什么?童话二分之一演员表
金棕色适合什么肤色?金棕色和金栗色茶色的区别有哪些?
回避型人格障碍的表现有哪些?回避型人格障碍怎么治疗?
天天快资讯丨袋鼠云数栈UI5.0焕新升级,全新设计语言DT Design,更懂视觉更懂你!
【世界热闻】芯驿电子发布车载系列产品全新品牌AUMO
速讯:仿制作图《这里是中国》封面
【天天播资讯】spring注解
升学宴是什么意思?学生升学宴家长答谢宴致辞
货柜标准尺寸是多少?货柜集装箱尺寸规格表
淘宝换购是什么意思?淘宝换购的东西是正品吗?
笔记本键盘怎么拆卸?笔记本电脑键盘拆卸方法
ddr2内存条还能用吗?ddr2和ddr3的区别有哪些?
爱奇艺弹幕开关在哪里?爱奇艺怎么关闭弹幕?
手机微信语音电话接不到是什么原因?手机微信语音没有声音是怎么回事?
观点:零跑汽车创始人:有信心在一些环节超越特斯拉
【全球热闻】大六缸白菜价!马自达CX-90售价公布:约27.8万元起
美国计划强制让电动汽车“发声” 20多年的老车也不放过
环球热资讯!冷空气今起发货!江南等地暴雨北方局地暴雪 出行注意
人民日报评智能电视套路收费:广告无法消除、会员一充再充
必应、Edge拥抱ChatGPT 微软一晚大赚5400多亿:AI时代已到
焦点报道:女子网上买iPhone 14收到一堆铁片 京东自营退一赔一
天天日报丨用ChatGPT搞钱年入百万!各路博主发布生财之道 网友回呛
今日讯!比亚迪秦PLUS DM-i 2023冠军版宣布2月10日发布:车机、续航全升级
精选!特斯拉跌落神坛?辅助驾驶横评仅得第七
必知必会的设计原则——依赖倒置原则
难怪发质没有变好!这么多年用吹风机竟用错了
每日快看:PC 10年来最大跌幅 2023依然寒气逼人:复活要靠Win10“死亡”
全球通讯!优化渣?《霍格沃兹之遗》3A游戏被指太吃硬件:8GB显存都不好意思打招呼
坐拥千万粉丝医生称女子因洁牙感染梅毒?口腔机构回应 权威科普来了
读Java实战(第二版)笔记04_用流收集数据
世界今热点:告别OLED!苹果2025年商用microLED:克服烧屏问题
【世界时快讯】一加杀入平板领域!一加Pad发布:天玑9000加持