Работа над методом, который выбирает опорный элемент для нахождения k-го наименьшего элемента в массиве с использованием медианы алгоритма медианов; Однако это не похоже, чтобы выйти pickCleverPivot после возвращения:Метод не выходит после оператора возврата
return median(A,left,right);
Если это помогает, предположим, что первоначально осталось 0, право 9, и А {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, а правый - 9, справа - слева = 9 & it> 5, значит, он не войдет в этот оператор возврата, да? Таким образом, это будет продолжаться вплоть до того, где он вызывает median_index и swap, что может быть узким местом. – Foleosy