研究一种方法,该方法使用中位数算法的中位数选择一个枢轴来查找数组中的第 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);
}