Cортировка слиянием с использованием O(1) дополнительной памяти — различия между версиями
(→Ссылки) |
|||
Строка 1: | Строка 1: | ||
− | =Ссылки= | + | Научившись сливать с использованием O(1) дополнительной памяти оставшееся решение задачи становится очевидным. Будем сливать не рекурсивно, чтобы сэкономить память в стеке. Пусть на i-том шаге у нас отсортированы подряд идущие, не пересекающиеся куски массива размером <tex> 2^i </tex>(за исключением последнего, его размер может быть меньше). Тогда сольем сначала первый и второй кусок, потом третий и четвертый и так до последнего. Если последнему куску нету пари, то просто ничего не делаем. |
+ | |||
+ | == Слияние == | ||
+ | === Шаг 1 === | ||
+ | Разобьем наш массив на группы | ||
+ | === Шаг 2 === | ||
+ | |||
+ | =Ссылки и литература= | ||
*[http://e-maxx.ru/bookz/files/knuth_3.djvu| Д.Е.Кнут - Искусство программирования (том 3) упр 18 к разделу 5.2.4] | *[http://e-maxx.ru/bookz/files/knuth_3.djvu| Д.Е.Кнут - Искусство программирования (том 3) упр 18 к разделу 5.2.4] | ||
*[http://pastebin.com/hN2SnEfP Реализация алгоритма на JAVA] | *[http://pastebin.com/hN2SnEfP Реализация алгоритма на JAVA] |
Версия 05:55, 7 июня 2011
Научившись сливать с использованием O(1) дополнительной памяти оставшееся решение задачи становится очевидным. Будем сливать не рекурсивно, чтобы сэкономить память в стеке. Пусть на i-том шаге у нас отсортированы подряд идущие, не пересекающиеся куски массива размером
(за исключением последнего, его размер может быть меньше). Тогда сольем сначала первый и второй кусок, потом третий и четвертый и так до последнего. Если последнему куску нету пари, то просто ничего не делаем.Содержание
Слияние
Шаг 1
Разобьем наш массив на группы