D:\sideБлогПеретасовка массива по Дуршенфельду

⚠️ Обращайте внимание на даты.
Этот блог больше не ведётся с 17 января 2023, и на тот момент с написания этой страницы (24.08.2013) прошло 9 лет.

Маленький, но полезный фрагмент GML, если вдруг кому-то такой нужен. Генерация случайной перетасовки массива. Модифицированный Дуршенфельдом метод Фишера-Йейтса. От изначального отличается тем, что все действия производит прямо в массиве, ничего не перебирая.

Сложность: \(O(size)\)

Предназначен для GameMaker Studio, но не любой, а достаточно новой (последние версии из 1.1 и любые более новые).

if !is_array(argument0)
    return 0;
var size = array_length_1d(argument0);
var i = 0;
var temp;
for (i = 0; i < size ; ++i)
{
    var ir = irandom(size - i - 1);
    temp = argument0[i + ir];
    argument0[i + ir] = argument0[i];
    argument0[i] = temp;
}
return argument0;