在O(n)
时间内,在一个长度为n的数组X中找到x,使得恰有 个元素小于x.
问题可以更一般化为”选取第i大的元素“问题
从一个长度为n的数组X中找到一个x,使得恰有 i-1 个元素小于x。
算法Select(A,i)
Input: 数组A[1:n], 1 i n
Output: A[1:n]中的第i-大的数
1. for j <- 1 to n/5
2. InsertSort(A[(j-1)*5+1 : (j-1)*5+5]);
3. swap(A[j], A[[(j-1)*5+3]);
4. x <- Select(A[1: n/5], n/10 );
5. k <- partition(A[1:n], x);
6. if k=i then return x;
7. else if k>i then retrun Select(A[1:k-1],i);
8. else retrun Select(A[k+1:n],i-k);
本站采用 知识共享署名-非商业性使用-相同方式共享3.0 中国大陆许可协议 进行许可,转载请注明出处。
推荐使用 chrome 浏览器浏览本站。