gpt4 book ai didi

c - 中位数的中位数不能正常工作

转载 作者:行者123 更新时间:2023-11-30 17:10:08 25 4
gpt4 key购买 nike

我正在为中位数算法编写 C 代码,以在最坏情况线性时间内找到第 k 个最小元素。我检查了我的代码的快速排序、交换等。一切看起来都不错,但每次仍然无法正常工作。

输入给定 -

n=12 kth=7
A[]=53 22 65 18 89 45 42 63 99 11 36 55

输出 -

Smallest at k=7 is 89

但输出需要是

Smallest at k=8 is 53

函数调用 -

med_of_medians(A,0,n-1,kth);

代码-

int med_of_medians(int A[], int a, int b, int kth)
{
if(a==b)
return 0;
int n=(b-a+1),median,pos,rank;
int i,med[(n+4)/5];
for(i=0;i<n/5;i++)
med[i]=find_median(A,(i*5)+a,((i+1)*5)-1);
if(n%5>0)
med[i++]=find_median(A,(n/5)*5+a,b);
median=(i==1)?med[0]:find_median(med,0,i-1);
pos=partition(A,a,b,median);
rank=pos-a+1;
if(rank==kth)
return A[pos];
else if(rank>kth)
return med_of_medians(A,a,pos-1,kth);
else
return med_of_medians(A,pos+1,b,kth-pos-1);
}

最佳答案

您可能希望在第一个 if 中返回 A[a]:

if (a == b)
return A[a];

find_median 调用的第二个索引中缺少 a:

med[i]=find_median(A,(i*5)+a, a +((i+1)*5)-1);

还应该为新的排名计算添加a(它应该是kth -rank):

return med_of_medians(A,pos+1,b,kth-pos-1 +  a);

关于c - 中位数的中位数不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com