Работая над « Самая быстрая сортировка для BrainF ***» , я обнаружил этот алгоритм, который равен O (N * k), где k - максимальное значение на входе. Для этого требуется O (N) дополнительного хранилища.
Физическая аналогия состоит в том, что у вас есть N стопок жетонов. Высота стека представляет значение, которое нужно отсортировать. (Каждый токен представляет собой бит). Отложите место для еще N стопок. Вы берете по одному жетону с вершины каждой стопки, в которой есть жетоны, и затем добавляете по одному в каждую стопку в новом наборе справа налево, пока ваша рука не опустеет. Повторяйте, пока все исходные стопки не станут пустыми. Теперь новый набор сортируется по возрастанию слева направо
В C:
void sort(int A[], int N)
{
int *R = calloc(N,sizeof(int));
do {
int i,count=0;
for (i=0;i
Есть ли у этого алгоритма имя? Похоже на сортировку бусинок , но я не думаю, что это то же самое.