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

При работе на "Самый быстрый вид для BrainF *** "Я обнаружил этот алгоритм, который является O (N * k), где k - максимальное значение на входе. Требуется O (N) дополнительное хранилище.

Физическая аналогия в том, что у вас есть N стеков токенов. Высота стека представляет значение для сортировки. (Каждый токен представляет немного). Выделите место для еще N стеков. Вы берете один жетон с вершины каждого стека, в котором есть токены, и затем добавляете один жетон в каждый стек нового набора справа налево, пока ваша рука не опустеет. Повторяйте, пока все оригинальные стеки не опустеют. Теперь новый набор отсортирован по возрастанию слева направо

В С:

 void sort(int A[], int N)
 {
    int *R = calloc(N,sizeof(int));
    do {
      int i,count=0; 
      for (i=0;i<N;i++) if A[i] { count++; A[i]--;}
      for (i=0;i<count;i++) R[i]++;
    } while (count);
    memcpy(A,R,N);  //A is now sorted descending.
    free(R);
 }

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

Ответы на вопрос(2)

Ваш ответ на вопрос