使用中位数算法选择一个用于在数组中找到第k个最小元素的数据集的方法;但是在返回后似乎没有退出pickCleverPivot:
return median(A,left,right);
如果有帮助,假设最初左边是0,右边是9,A是{1,2,3,4,5,6,7,8,9,10}。
以下是方法:
private static int pickCleverPivot(int left, int right, int[] A){
int index = 0;
if((right-left) <= 5){
return median(A,left,right);
}
for(int i = 0; i < (A.length+5-1)/5; i++){ //Ceiling of n/5 = (A.length+5-1)/5).
int R = left+4;
if(R > right){
R = right;
}
int med_index = median_index(A,left,R);
swap(A, med_index, index);
index++;
left +=5;
}
left = 0;
return pickCleverPivot(left, left+(A.length+5-1)/5, A);
}
答案 0 :(得分:2)
您的代码无法忽略return语句。
也许你创造了一个无限循环? 如果要在代码中找到错误,只需添加大量打印语句即可。例如,在返回之前打印所有方法的返回值。
如果您仍然无法找到错误,则应发布所有代码,以便我们能够自行运行您的代码。
答案 1 :(得分:0)
我要说,进行逐步调试,最有可能的是,有一个无限循环导致返回停止从方法返回。或者,粘贴完整的代码,我可以尝试找到错误。
答案 2 :(得分:0)
我想我找到了一些东西:
每次对函数进行递归调用时,都会使用相同的参数。 A
保持相同的值,因为right - left < 5
始终是相同的数组。因此,如果它大于5,则永远不会逃避递归函数,因为to_sql
将始终为false。