1.问题
设L是n个元素的集合,从L中选取第K小的元素,其中1<=K<=n。
2.解析
k=|S1|+1,m*就是所要找的第k小的数;以m为划分标准后,比m小的有|S1|个,如果恰巧,k=|S1|+1,则m就是所要找到第k小的数)
k<=|S1|,归约为在S1中找第k1小的子问题,k1在子问题中的相对位置不变,即k1=k;
k>|S1|+1,归约为在S2中找k2位置的子问题,k2相对于S2子问题和k相对于S的关系,即k2=k-|S1|-1。(在S中找k,就是在S2中找k2)
3. 设计
算法Select(S,k)
输入:数组S,S的长度n,正整数k,1<=k<=n
输出:第k小的数
将S划分成5个一组,共「n/