【发布时间】:2017-02-09 10:05:08
【问题描述】:
研究一种方法,该方法使用中位数算法的中位数选择一个枢轴来查找数组中的第 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);
}
【问题讨论】:
-
嗯,如果你的 lft 是 0,right 是 9,right - left = 9 & it's > 5,所以它不会进入那个 return 语句,是吗?那么,它会继续向下调用median_index和swap,这可能是瓶颈。
标签: java arrays return median-of-medians