1.问题
选择问题(Selection Problem),即在n个元素的集合中寻找第K小的元素的问题。
2.解析
3.设计
将S划分成5个一组,共n/5(上取整)个组
每组中找一个中位数,把这些中位数放到集合M中
m* <- Select(M,|M|/2) //选M中的中位数m*,将S中的数组划分成A,B,C,D四个集合
把A和D中的每个元素与m*比较,小的构成S1,大的构成S2
S1 <- S1并C ; S2 <- S2并B
if k=|S1|+1 then 输出m*
else if k<=|S1|
then Select(S1,k)
else Select(S2,k-|S1|-1)
4.分析
5.源码
https://github.com/Hyacincy/-/blob/main/%E9%80%89%E6%8B%A9%E9%97%AE%E9%A2%98.cpp