Введение

Сортировка бусинками, также называемая сортировкой гравитацией, — это естественный алгоритм сортировки, разработанный Джошуа Дж. Аруланандамом, Кристианом С. Калуде и Майклом Дж. Диннееном в 2002 году и опубликованный в журнале The Bulletin of the European Association for Theoretical Computer Science. Как цифровые, так и аналоговые аппаратные реализации сортировки бусинками могут достигать времени сортировки O(n). Однако программная реализация этого алгоритма, как правило, значительно медленнее и может использоваться только для сортировки списков положительных целых чисел. Кроме того, даже в лучшем случае алгоритму требуется O(n²) памяти.

Обзор алгоритма

Сортировку бусин можно сравнить с тем, как бусины скользят по параллельным столбам, например, на абаке. Однако на каждом столбе может быть разное количество бусин. Сначала может быть полезно представить бусины подвешенными на вертикальных столбах. На шаге 1 такая организация демонстрируется с использованием n=5 рядов бусин на m=4 вертикальных столбах. Числа справа от каждого ряда указывают число, которое представляет данный ряд; ряды 1 и 2 представляют положительное целое число 3 (поскольку каждый из них содержит три бусины), а верхний ряд представляет положительное целое число 2 (поскольку он содержит только две бусины). Если мы позволим бусинам упасть, ряды теперь будут представлять те же числа в отсортированном порядке. Ряд 1 содержит наибольшее число в наборе, а ряд n – наименьшее. Если была соблюдена вышеупомянутая условность, согласно которой ряды содержат бусины на столбах 1–k, а столбы k+1–m остаются пустыми, то это останется верным и здесь. Позволяя бусинам "падать" в нашем физическом примере, мы позволяем большим значениям из верхних рядов распространяться в нижние ряды. Если значение, представленное рядом a, меньше значения в ряду a+1, некоторые бусины из ряда a+1 упадут в ряд a; это обязательно произойдет, поскольку в ряду a нет бусин в этих позициях, чтобы остановить падение бусин из ряда a+1. Механизм, лежащий в основе сортировки бусин, аналогичен механизму сортировки подсчетом; количество бусин на каждом столбе соответствует количеству элементов со значением, равным или большим, чем индекс этого столба.