int choose_pivot(int lo, int hi){
int mid = ((hi-lo)/2)+1;
if((arr[hi]<arr[lo])^(arr[hi]<arr[mid])){
return hi;
}
else if((arr[lo]<arr[hi])^(arr[lo]<arr[mid])){
return lo;
}
else{
return mid;
}
}
この関数は、次のようにピボットを選択する必要があります。指定された配列の最初、中間、および最後の要素を検討してください。(配列の長さが奇数の場合、「中間」要素が何であるかを明確にする必要があります。長さが 2k の偶数の配列の場合、k 番目の要素を「中間」要素として使用します。これらの 3 つの要素のどれが中央値であるかを識別します。その価値。
この関数が意図したとおりに機能しない可能性があるという問題はありますか? 関数が望ましい結果をもたらさないケースを見逃していますか?