算法分析与实践作业六
1. 问题
在n个元素的集合中寻找第K小的元素的问题
2. 解析


3. 设计
输入:n个数的数组S,正整数k
输出:S中的第k小元素
将S划分为5个一组,共⌈n/5⌉个组
每组找一个中位数,把这些中位数放到集合M中
m*<-Select(M, ⌈|M|/2⌉)
把A和D中的每一个元素与m*比较,小的构成S1,大的构成S2
S1<-S1UC;S2<-S2UB;
If k=|S1|+1 then 输出m*
else if k<=|S1|
then Select (S1,k)
else Select(S2,k-|S1|-1)
4. 分析
W(n)=O(n)

运行结果:

5. 源码
github地址:https://github.com/122cmy/myGitTemp6
博客地址:https://www.cnblogs.com/122cmy/

浙公网安备 33010602011771号