Внедренный массив означает нарушение порядка всех элементов в массиве.
Общим методом является передача функции методу нативного вида массива, который случайным образом возвращает 1 или -1 для достижения цели случайного расположения элементов массива.
Кода -копия выглядит следующим образом:
arr.sort (function (a, b) {return math.random ()>. 5? -1: 1;});
Хотя этот метод интуитивно понятен, он не эффективен. После моего испытания он испортил множество из 10 000 элементов, и время, которое это заняло, составило около 35 мс (Firefox)
У меня всегда было отличное качество разрыва запеканки, чтобы спросить конец, поэтому я нашел эффективный метод. Смотрите этот исходный текст
Кода -копия выглядит следующим образом:
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], это [i] = это [j], это [j] = x);
вернуть это;
};
}
arr.shuffle ();
Этот метод добавляет функцию в массив.
Возьмите массив из 10 000 элементов выше, чтобы проверить его. Для завершения этого требуется всего 7 или 8 миллисекунд, чтобы завершить его вне порядка, используя этот метод.
Увеличьте элементы массива в 10 раз до 100 000 для тестирования. Первый метод сорта занимает около 500+мс, а метод перетасовки занимает около 40 мс. Разница огромна.
Полный тестовый код:
Кода -копия выглядит следующим образом:
var count = 100000, arr = [];
for (var i = 0; i.5? -1: 1;});
Array.prototype.sort.call (arr, function (a, b) {return math.random ()>. 5? -1: 1;});
document.write (arr+'
');
var t1 = new Date (). getTime ();
Document.Write (T1-T);
// Следующие методы наиболее эффективны
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], это [i] = это [j], это [j] = x);
вернуть это;
};
}
var t = new Date (). getTime ();
arr.shuffle ();
document.write ('
'+arr+'
');
var t1 = new Date (). getTime ();
Document.Write (T1-T);
Кроме того, заметили ли вы петлю в коде перемешивания? У него нет второй половины! То есть есть только для (..), но не следующее {..}, так что вы можете написать таким образом! И это на самом деле выполняется нормально! Это так любопытно, я должен пойти в парк блога, чтобы спросить.