Медиана медиан, понимающих код

Я нашел реализацию алгоритма в C ++ здесь
https://gist.github.com/andlima/1774060
но я не понимаю цели нескольких строк и как они работают,

  1. Должен ли я добавить оператор if, что если n меньше определенного значения, мы должны просто отсортировать массив и вернуть v [k]?
  2. В 4-й строке, почему мы создаем переменную, увеличивая ее на 4? Я понимаю, что мы должны разделить это на 5, чтобы иметь количество маленьких массивов
  3. За что отвечает этот цикл for в 6 строке? Это для разделения основного массива на более мелкие, которые мы хотим отсортировать, а затем создать массив медиан? Почему существует функция подкачки и почему мы разделяем ее на условия if и else?
  4. Почему мы удаляем массив medians после вызова той же строки функции перед
  5. Какова цель цикла в 25 строк и это в 33, а также своп в 38?

Я буду очень благодарен за любую помощь с этим.

-1

Решение

  1. Это оптимизация. Реализация Можно сделать это, но это не должно делать это.
  2. Добавление четырех делается для округления результата деления на пять. Это обычная уловка с целочисленным делением: если вы хотите округлить результат деления на N, добавлять N-1 до разделения.
  3. Цикл в строке 6 отвечает за итерацию пятиэлементных фрагментов массива. if условие проверяет, имеет ли кусок пять элементов. for циклы внутри выполняют сортировку выбора, меняя местами элементы, чтобы поместить медиану в индекс w[2]
  4. Мы удаляем medians как только закончится рекурсивный вызов, потому что остальной части алгоритма это не нужно.
  5. Петля на линии 25 ходов pivot в конечную позицию массива.
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]