Bur-Burito: Не за что. Для примера, я написал целый язык программирования с использованием этой техники (github). Там есть пример грамматики в форме BNF(вики).
int n = getContainsRandom(rtn, count)+1;
rtn.add(n);
Пусть рандом вернул вам 2. Вы проверяете, есть ли в списке 2. Список пуст, вы ложите в него 3. Пусть рандом снова вернул вам 2. Вы проверяете, есть ли в списке 2. Там есть только 3, вы снова ложите в него 3.
Как-то там всё сложно и нет чёткой идеи - как это реализовать-то? Я бы предложил что-то из классики, например, очень хорошо сюда подходит метод рекурсивного спуска.
Я бы ещё оптимизировал и не парсил айдишники каждый раз. Как-то это накладно получается и добавляет нормальную такую константу-множитель к сложности сортировки.