在一个n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。
使用选择算法,可以在Θ(n)时间内找到第i个顺序统计量
- 对序列A进行划分,使得[s...p-1] < [p] < [p+1...e]
- 如果p==i,则返回A[p]
- 如果p>i,对[s...p-1]重新划分,反之对[p+1...e]重新划分
private static int Select(List<int> sq, int s, int e, int i) { //如果s=e了,说明找到了 if (s >= e) return sq[s]; //划分 int q = Partition(sq, s, e); //找到了 if (q == i - 1) return sq[q]; //前半部分找 else if (q > i - 1) { return Select(sq, s, q - 1, i); } //后半部分找 else { return Select(sq, q + 1, e, i); } }