Чтобы всегда давать один и тот же результат первого метода, второй должен заканчиваться одинаковыми номерами в последней итерации.
Например, приведенный пример должен привести к 6,5
[2, 3, 12, 14], [1, 5, 8, 9] → [1, 2, 3, 5 , 8 , 9, 12, 14] → (5 + 8) / 2 → 6,5
Чтобы гарантировать, что при делении диапазонов с четным числом элементов вы должны добавить нижеприведенный элемент посередине:
[2, 3 , 12 , 14], [1, 5 , 8 , 9] → [2, 3, 12 ], [ 5 , 8 , 9] → [3, 12], [5, 8] → 6,5
As на самом деле соответствующая часть кода на странице, на которую вы ссылаетесь, это
int getMedian(int ar1[],
int ar2[], int n)
{
// ...
if (m1 < m2)
{
if (n % 2 == 0)
return getMedian(ar1 + n / 2 - 1, // <- Note the difference
ar2, n - n / 2 + 1);
return getMedian(ar1 + n / 2, // <-
ar2, n - n / 2);
}
if (n % 2 == 0)
return getMedian(ar2 + n / 2 - 1, // The same here
ar1, n - n / 2 + 1);
return getMedian(ar2 + n / 2,
ar1, n - n / 2);