题目:对一个含有n个元素的集合来说,所谓的k分位数,就是能把已排序的集合分成k个大小相等的集合的“k-1个顺序统计量”。请给出一个能求出含有n个元素(无序)的集合的k分位数的O(nlgk)时间的算法。
分析:
k_select(a[n],k)
{
if(k == 0)
return ;
m = bit_select(a[n],2);//寻找中位数,m为中位数,时间复杂度为O(n)
将a[n]根据m划分为两块,m作为中间位置存在,左边的比它小,右边的比它大,O(n)
m1 = k_select(a[1,m-1],k/2);
m2 = k_select(a[m+1,……n],k/2);
}