ОК, как вы правильно заметили, есть (n-1)!различные перестановки вашего массива, и вы хотите алгоритм, который перечисляет их в случайном порядке.Если вам нужно создать весь список в случайном порядке, я бы предложил сначала создать список перестановок, а затем перетасовать его.Если вы просто хотите сгенерировать их по одному и не обращать внимания на дубликаты, я бы порекомендовал взять любую фиксированную перестановку, перестановить цифры, которые можно изменить, и затем вывести результат.Оба они концептуально просты;используйте Fisher-Yates для перетасовки.
Предположим, вместо этого вы хотите создать последовательность различных перестановок, без предварительного вычисления списка всех перестановок.Такой список будет длинным для разумных русских.Если длина вашей последовательности мала по отношению к числу перестановок (n-1) !, то запоминание тех, которые вы уже сгенерировали, и попытка снова и снова, пока вы не получите один из них, не является подходящим.Вам нужно будет определить возможные вероятности, чтобы дать вам хорошее представление о том, что для вас означает «маленький» (ожидаемое время выполнения ухудшается с каждой новой перестановкой, добавляемой в список).Если известно, что число перестановок составляет значительную долю от числа всех возможных перестановок, вероятно, лучше пойти дальше и рассчитать их все заранее, возможно, в сжатом формате, чтобы сэкономить место.