知道伪代码求C语言代码,求第K小数
答案:1 悬赏:10 手机版
解决时间 2021-11-26 14:58
- 提问者网友:咪咪
- 2021-11-26 02:46
知道伪代码求C语言代码,求第K小数
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-11-26 03:53
必须得按照这个伪代码实现么?
怎么感觉这个代码不对呢?
其中第3步中,分组之后,把其它的舍弃,感觉没有道理。追问可以你自己改改 方法差不多就可以哦追答//您好,刚写的,找第k小的程序
//用的是快排的思想 nlog(n)的复杂度
//测试通过,有疑问欢迎交流
#include
#include
int get_k_small(int * tar, int n, int k){
if(k == 1)
return tar[0];
int pilot = tar[0];
int * head= tar;
int *end = tar + n - 1;
int count = 0;
while(head < end){
while(*end > pilot && head < end)
end--;
if(head < end){
*head = *end;
}
while(*head < pilot && head < end){
head++;
count++;
}
if(head < end){
*end = *head;
}
}
*head = pilot;
if(count - 1 == k)
return count;
else if(count < k){
return get_k_small(head+1, n - count - 1, k- count - 1);
}else{
return get_k_small(head-count, count, k);
}
}
int main(){
int *a;
a = new int [100];
for(int i = 0; i< 100; i++){
//a[i] = rand()%1000;
a[i] = i;
}
printf("%d
", get_k_small(a, 100, 50));
return 0;
}
怎么感觉这个代码不对呢?
其中第3步中,分组之后,把其它的舍弃,感觉没有道理。追问可以你自己改改 方法差不多就可以哦追答//您好,刚写的,找第k小的程序
//用的是快排的思想 nlog(n)的复杂度
//测试通过,有疑问欢迎交流
#include
#include
int get_k_small(int * tar, int n, int k){
if(k == 1)
return tar[0];
int pilot = tar[0];
int * head= tar;
int *end = tar + n - 1;
int count = 0;
while(head < end){
while(*end > pilot && head < end)
end--;
if(head < end){
*head = *end;
}
while(*head < pilot && head < end){
head++;
count++;
}
if(head < end){
*end = *head;
}
}
*head = pilot;
if(count - 1 == k)
return count;
else if(count < k){
return get_k_small(head+1, n - count - 1, k- count - 1);
}else{
return get_k_small(head-count, count, k);
}
}
int main(){
int *a;
a = new int [100];
for(int i = 0; i< 100; i++){
//a[i] = rand()%1000;
a[i] = i;
}
printf("%d
", get_k_small(a, 100, 50));
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯