欢迎光临散文网 会员登陆 & 注册

【编程笔记】快速选择算法

2023-01-03 14:46 作者:夕弦-Yamai_Yuzuru  | 我要投稿

快速选择算法主要用于在一个未排序的数组中寻找第k个最小/最大的数。它的方法类似于快速排序,快速排序和快速选择算法都是Tony Hoare发明的。

快速选择算法思路

只需要每次判断k在左区间还是右区间,一直递归查找k所在的区间。

当只剩下一个数时,数组中就只有一个数,答案是返回数组的值。

平均时间复杂度O(n),不过最坏情况仍然是O(n^2)

Top K问题

找到未排序的数组中第k个最大的元素。(数组排序后找到第k个最大的元素,而不是第k个不同的元素。)

快速选择算法的过程

这里求的是从小到大排序后的第 k 个数

1.找到分界点x(诸如q[L],q[(L+R)/2],q[R]都行)

2.使左边所有数L<=X,右边所有数R>=X(和X相等的数在左右两边都有可能)

3.递归判断k在左右边,当要求的第k个数,k<=j + 1,则递归排序左边,否则递归排序右边。

快速选择算法N-S图

愉悦,今天的学习很快乐!

夕弦·旗袍

夕弦的图片由NovelAI生成,使用的模型以up主红心咖啡_Official的八舞模型为基底,并做了一定的更改训练 

【编程笔记】快速选择算法的评论 (共 条)

分享到微博请遵守国家法律