Очевидно, что чем более равномерен подсчет представителей каждого множества, тем больше существует способов выбрать k разных. Это очень сильно наталкивает на мысль, что попытки синтезировать числа по одному способомами выше приведут к неравномерному ответу
ну... можно сначала взять случайную перестановку из n чисел от 1 до n. Потом для каждого: если число больше k, то выбрать случайное из всех. Иначе выбрать случайное из конкретного множества
Что такое не сортируя, есть алгоритм имитирующий быструю сортировку, каждый раз берём опорный элемент, смотрим сколько меньше него, сколько больше и решаем куда идти