Что это за алгоритм сортировки O (N * k)?

Работая над « Самая быстрая сортировка для 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

Есть ли у этого алгоритма имя? Похоже на сортировку бусинок , но я не думаю, что это то же самое.

5
задан Community 13 April 2017 в 12:38
поделиться