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

什么是快速选择?

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

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

案例分析:对快排的剪枝

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

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

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

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

相关推荐
MC皮蛋侠客25 分钟前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年32 分钟前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
蔬菜_1 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
CV-X.WANG3 小时前
从零理解 ORB-SLAM3(二):系统全景、执行上下文与核心数据结构
数据结构
Doraemomo3 小时前
数据结构-二叉树
数据结构
爱跳舞的烤冷面3 小时前
自学嵌入式第20天(数据结构篇——队列)
数据结构
旖旎夜光4 小时前
LeetCode 202:快乐数(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
cpp_25015 小时前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解
Doraemomo5 小时前
数据结构-哈希表
数据结构·算法·散列表
君君思密达5 小时前
Leetcode Hot 100 题目详解-哈希表
数据结构·算法·leetcode