Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
for (i = 1, max = a[0]; i < len; i++)
if (a[i] > max) max = a[i];
beads = calloc(1, max * len);

В худшем случае m = n.Вы ошибаетесь. В худшем случае m много больше n. Так, при сортировке миллиона «обычных» чисел n=10^6, m=2^32. Именно такой эффект и ограничивает применимость сортировки подсчетом.
import Data.List
beadSort :: [Int] -> [Int]
beadSort = map sum. transpose. transpose. map (flip replicate 1)
Бисерная сортировка (Bead sort)