@
binux 当时没想到嘛!!!!看到下面的回复就会了!!!!_(:з」∠)_
@
yyai3 综合你们两个的!!!我找到思路了!!!!
先写个伪代码,大家看看对不对
对K排序
void batch_select(int A[],int K[],int A_low,int A_high,int k_low,int k_high){
if (k_high-k_low)<1{
result[k_low]=select(A,A_low,A_high,K[k_low]);//result数组用来存放结果
return;
}
else if (k_high-k_low)==1 {
result[k_low]=select(A,A_low,A_high,K[k_low]);
result[k_high]=select(A,A_low,A_high,K[k_high]);
return;
}
else {
在S中找到select(A,A_low,A_high,K[(k_low+k_high)/2]),分成两组,返回此数字的元素位置为A_mid
for (int i=(k_low+k_high)/2;i<=k_high;i++){
K[i]=K[i]-A_mid;
}
result[(k_low+k_high)/2]=S[A_mid];
batch_select(A,K,A_low,A_mid-1,k_low,(k_low+k_high)/2);
batch_select(A,K,A_mid+1,A_high,(k_low+k_high)/2,k_high);
return;
}
}
@
Angdo 应该就是上面这个思路吧,其实和yyai3的一个意思,他就是没说的很明白
@
dingyaguang117 如果是有序的,那找第k小元素的时间复杂度是O(1)哦
@
hpeng 谢谢谢谢!!!!!原来是这个!!!!