什么是快速选择及案例分析

什么是快速选择?

我们这里指的选择是指找出序列第 K 大或者第 K 小的数据。

对于这类问题,如果想用旧知识解决。那完全可以先将数据进行排序,比如使用上文中的快速排序算法。那自然很容易从有序数据中找出第 K 的数据。

案例分析:对快排的剪枝

如果你对上文的快排原理已经了解了,那么会发现对于快速选择这个问题,使用完整的快排完全是大材小用的。因为很多数据完全是不用再花费精力去排序的。

再拿上述 [4, 1, 6, 9, 8, 5, 2, 3, 0, 7] 举例,若此时要获得第 5 小的数据(k=5, 从0开始计)。

我们只要在递归树中不断地判断,是否满足了 5 个数据相对有序即可。

最终我们会发现在我们找到 k=5 时,左右两侧都可能还是乱序的。即使在整体乱序下我们还是找到了第 k 的数据,并避免很多递归和排序,可见整个算法跑下来的速度肯定不会大于将整体数据进行排序。

相关推荐
流年如夢3 小时前
排序算法详解
数据结构·算法·排序算法
z200509304 小时前
今日算法(二叉树)
数据结构·c++·算法
故事和你915 小时前
洛谷-【图论2-2】最短路1
开发语言·数据结构·c++·算法·动态规划·图论
Simple-Soft5 小时前
指针的高级应用与技巧 - C语言的灵魂
c语言·数据结构·算法
Controller-Inversion5 小时前
23. 合并 K 个升序链表
数据结构·链表
Mr_pyx5 小时前
面试题记录
jvm·数据结构·算法·spring·mybatis
努力努力再努力wz6 小时前
【C++高阶数据结构系列】:时间轮定时器详解:原理分析与代码实现,带你从零手撕时间轮!(附时间轮的实现源码)
c语言·开发语言·数据结构·c++·qt·算法·ui
iiiiyu6 小时前
⾯向对象和集合编程题
java·大数据·开发语言·数据结构·编程语言
YuanDaima20486 小时前
贪心算法基础原理与题目说明
数据结构·人工智能·python·算法·贪心算法·手撕代码