Введение

Линейное время, аналоговый алгоритм сортировки последовательности элементов.

Спагетти-сортировка — это аналоговый алгоритм сортировки последовательности элементов с линейной временной сложностью, представленный А. К. Дьюдни в его колонке в журнале Scientific American. Этот алгоритм сортирует последовательность элементов, требуя O(n) места в стеке и обеспечивая стабильную сортировку. Для его работы требуется параллельный процессор.

Алгоритм

Для простоты, предположим, что мы сортируем список натуральных чисел. Метод сортировки иллюстрируется с использованием невареных палочек спагетти: для каждого числа x в списке возьмите палочку длиной x. (Один из практических способов выбора единицы измерения – соотнести наибольшее число m в списке с одной полной палочкой спагетти. В этом случае полная палочка равна m единицам спагетти. Чтобы получить палочку длиной x, сломайте палочку на две части так, чтобы одна часть была длиной x единиц; вторую часть отбросьте.) Когда у вас будут все палочки, возьмите их в кулак и опустите на стол, чтобы они стояли вертикально, опираясь на поверхность стола. Теперь, для каждой палочки, опустите другую руку сверху, пока она не коснется палочки – эта, очевидно, самая длинная. Удалите эту палочку и поместите её в начало (первоначально пустого) выходного списка (или, что эквивалентно, в последний свободный элемент выходного массива). Повторяйте, пока не удалите все палочки.

Анализ

Приготовление n палочек спагетти занимает линейное время. Опускание палочек на стол занимает постоянное время, O(1). Это возможно, потому что рука, палочки спагетти и стол работают как полностью параллельное вычислительное устройство. Затем нужно убрать n палочек, поэтому, предполагая, что каждая операция контакта и удаления занимает постоянное время, временная сложность алгоритма в худшем случае составляет O(n).