ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode


Как перемешать массив или список


При выполнении некоторых задач требуется перемешать случайным образом (перетасовать) массив или список с данными. Для решения данной проблемы существуют специальные алгоритмы. Рассмотрим один один из таких алгоритмов под названием Тасование Фишера-Йетса.

Алгоритм Фишера — Йетса (Современная версия)

Тасование Фишера-Йетса (Fisher–Yates shuffle) используется для выполнения случайных перестановок множества элементов. Например, массивов или списков.

На псевдокоде алгоритм можно представить следующим образом:

Ниже будут приведены реализации данного алгоритма на языках Си и C#.

Перемешать массив на Си

Перемешать элементы массива, состоящего из целых чисел, на языке программирования Си можно с помощью следующей функции shuffle (реализованной ниже). Пример программы:

Результат работы программы (изначально массив был заполнен десятичными цифрами в порядке от 0 до 9):

Как перемешать массив


Можно отредактировать функцию shuffle, изменив тип данных массива, указав вместо целого типа данных int, любой другой нужный.

Перемешать массив на C#

Перемешать элементы массива целых чисел на языке C# можно с помощью следующего метода, реализующего алгоритм Фишера — Йетса:

Целый тип int можно заменить на любой другой, который вам потребуется.

Чтобы не дублировать код, создавая методы под каждый тип данных, можно создать один универсальный метод, используя обобщения C#:

Как перемешать список на C#

Тасование Фишера-Йетса также можно использовать для перемешивания списков и других коллекций. Реализуем алгоритм для случайной перестановки элементов списка List на C#, используя обобщенный тип данных.

Для более удобного использования метода перемешивания элементов, можно создать потомка класса коллекции (например списка) и реализовать в классе-потомке данный метод.

Дальнейшее создание списка и применение метода перемешивания элементов, будет реализовываться следующим образом:

Стоит отметить, что в языке Java у коллекций (например у ArrayList) уже есть реализованный метод с названием shuffle, перемешивающий элементы.

4.5/5 - (16 голосов)



Поделиться в соц. сетях:

Добавить комментарий

Ваш адрес email не будет опубликован.