Учитывая список элементов, существует ли алгоритм перетасовки, который гарантирует, что в конечном итоге выбранная половина будет с одной стороны, а остальная часть - с другой?Как я могу перетасовать список без случайности и гарантировать, что часть элементов в конечном итоге появится с одной стороны?
Пример: {4, 3, 10, 7, 2, 9, 6, 8, 1, 5}
Учитывая установленное выше, я хотел бы иметь алгоритм смешивания, что в конечном итоге перемещает отмеченные слева, хотя сам алгоритм не знает, что есть и не «отмечен».
{4, 3, 10, 7, 2, 9, 6, 8, 1, 5}
Х Х X X X
Приемлемые результаты были бы:
{4, 10, 9, 6, 1, 3, 7, 2, 8, 5}
{1 , 9, 10, 4, 6, 2, 8, 5, 7, 3}
{1, 4, 9, 10, 6, 3, 7, 5, 8, 2} и т.д.
Сложность: Алгоритм не должен использовать случайные числа для смешивания содержимого, это должен быть итеративный процесс. Итак, Фишер-Йейтс не работает.
Разве это не алгоритм быстрой сортировки? – DumbCoder
чувствует себя как shenanigans =). Помечено один раз - позиции или цифры? – foret
Я не вижу, как алгоритм, не знающий маркировки, может уважать маркировку. –