// Наш исходный сортируемый массив
x = {..<int> elements to be sorted...}
// Вспомогательная переменная
rangepow = 1
// Вспомогательный массив,
// копирующий исходный X
source = array<int>[n] filled 0
for step = 0 to width-1
// массив подсчета
count = array<int>[range] filled 0
// Копируем в source содержимое X
// на текущей итерации
source[] = copy of x[]
// Получаем в count пока просто
// количества текущих разрядов
for i = 0 to n-1
// d - это значение текущего разряда
// для каждого нашего числа
d = (source[i] / rangepow) % range
count[ d ]++
// Завершаем формирование count, т.е. получаем
// количество элементов менших индекса
summNum = 0 // вспомогательная переменная
for i = 0 to range-1
tmp = count[i]
count[i] = summNum
summNum += tmp
// Завершающий этап "вставка"
for i = 0 to n-1
d = (source[i] / rangepow) % range;
x[ count[d] ] = source[i];
count[d]++; // Очень важная конструкция:
// для случая посторяющихся чисел.
}
rangepow *= range