Есть рабочий алгоритм MergeSort. Нужно модифицировать его так, чтобы он по совместительству находил и число инверсий в массиве.
Инверсией считается пара чисел массива, если выполняется условие A[left] > A[right]. И так же все оставшиеся элементы левой части тоже будут больше, т.к. левая и правая часть отсортированы. Поэтому количество инверсий нужно увеличить на количество оставшихся элементов + 1 (текущий элемент).
Проблема заключается в том, что, например, в таком наборе чисел «145, 179, 232, 307, 588, 792, 22, 233, 279, 336, 863, 866» кол-во инверсий равно числу 14, а на выводе 15. Хотя при другом наборе, например, «1, 5, 8, 3, 7, 10» выводит правильное число, это 3.
Вот моя наработка:
public static void MargeSort(int[] array, int l, int r)
{
if ((r - l) < 2)
return;
MargeSort(array, l, (l + r) / 2);
MargeSort(array, (l + r) / 2, r);
Marge(array, l, r);
}
private static int inversionsCount = 0;
public static void Marge(int[] array, int l, int r)
{
int middle = (l + r) / 2;
int left = l;
int right = middle;
int index = 0;
int[] buff = new int[r - l];
while ((left < middle) && (right < r))
{
if (array[left] > array[right])
{
buff[index++] = array[left++];
// здесь идет подсчет кол-ва инверсий
inversionsCount += middle - left;
}
else buff[index++] = array[right++];
}
while (left < middle)
buff[index++] = array[left++];
while (right < r)
buff[index++] = array[right++];
index = 0;
while (index < buff.Length)
array[l + index] = buff[index++];
}
Не могу понять в чем проблема.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь убрать верхнюю строку с названием приложения и поменять тему с черной на белую с помощью параметра
Добрый день, столкнулся с HTML в рамках лабораторной работы, более легкие задания удалось выполнить, а здесь не понимаю, как связать нестандартный...
Пробная версия по написанию книг, в данном случае по языку JavaScriptПодробнее здесь: Как мы хотим начать писать Книги сообщества?
Есть библиотека для миграции БД (mongo-migrate - https://githubcom/afloyd/mongo-migrate), она запускается следующей строкой в терминале nodejs: node