ランダム要素が 5 つある場合、6 回の比較だけで中央値を求めることができます。ただし、次の条件も満たされているという点で、追加の要件があります。
a < c && b < c && c < d && c < e
a < b または d < e には必要ありません。
7 回の比較でこの条件を満たすことができましたが、6 回ではありませんでした。これは私のコードであり、自明のはずです:
void medianSort(int[] arr)
{
assert(arr.length == 5);
void sortPair(ref int a, ref int b)
{
if(a > b) swap(a, b);
}
sortPair(arr[0], arr[1]);
sortPair(arr[3], arr[4]);
sortPair(arr[0], arr[3]);
sortPair(arr[1], arr[4]);
sortPair(arr[2], arr[3]);
sortPair(arr[1], arr[2]);
sortPair(arr[2], arr[3]);
}
中央値 5 を使用してピボットを選択することで強化したいクイック ソートがあります。その条件を満たすことで、すでに 5 つの要素がソートされています。
これを 6 回の比較で達成することは可能ですか、それとも 7 回が最善でしょうか?