算法分析与实践作业六

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/

posted @ 2021-04-19 16:32  小月爱写代码  阅读(68)  评论(0)    收藏  举报