хочу реализовать алгоритм сортировки слиянием по-другому - PullRequest
0 голосов
/ 02 марта 2012

Объединить Сортировать разделить список на наименьшую единицу (1 элемент), затем сравнить каждый элемент со смежным списком, чтобы отсортировать и объединить два соседних списка. Наконец все элементы отсортированы и объединены. Я хочу реализовать алгоритм сортировки слиянием таким образом, чтобы он разделял список на наименьшую единицу из двух элементов, а затем сортировал и объединял их. ? Как я могу реализовать это ???

MERGE-SORT (A, p, r)

  1. IF p
  2. ТОГДА q = ЭТАЖ [(p + r) / 2] // Шаг деления
  3. MERGE (A, p, q) // Шаг завоевания.
  4. MERGE (A, q + 1, r) // Шаг завоевания.
  5. MERGE (A, p, q, r) // Шаг завоевания.

что-то вроде р <г + 1. </p>

1 Ответ

1 голос
/ 02 марта 2012

Я сделал что-то, что звучит так раньше.Вот 2 варианта.

Вариант 1: Просмотрите список, отсортировав каждую пару.Затем пройдитесь по списку, объединяя каждую пару пар.Затем каждая пара по 4 и так далее.Когда вы объединили весь список, все готово.

Вариант 2: есть стек отсортированных массивов.Каждый элемент сливается с нижним массивом, а затем каскадом, но сливается вниз, пока не останется только один, или второй сверху не станет больше верхнего.После того, как ваш последний элемент был добавлен, сверните массив, объединив его.

В случае, когда я использовал вариант 2, был случай, когда у меня было очень большое количество потоковых данных. Я сохранил первые несколько стековотсортированных массивов в памяти, а затем и более поздних, хранящихся на диске.Это приводит к хорошему месторасположению и эффективному использованию диска.(Вы спрашиваете, почему я не использовал готовое решение? Ну, набор данных, который я получал, был больше, чем диск, на котором я должен был его обрабатывать, там была настраиваемая логика слияния, и в действительности это был не тоттрудно писать.)

...