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