Blog. Just Blog

Перемешивание массива на JavaScript

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Перемешивание массива на JavaScript
Перемешивание массива на JavaScript

Несмотря на особенности сортировки массивов в JavaScript, которые нашли отражение даже в интернет-мемах, без этой самой сортировки не обойтись. Случайное перемешивание массива - тоже своеобразный вариант сортировки. Для его реализации в этих ваших интернетах обычно рекомендуют воспользоваться следующим или каким-то подобным кодом:
  1. var test_array=[1,2,3,4,5,6,7,8,9,10];
  2.  
  3. test_array.sort(
  4.     function() { return (Math.random()-0.5); }
  5. );
  6. // test_array -> перемешанный массив
На первый взгляд функция рабочая, но при тестировании, особенно на больших массивах, результат оставляет желать лучшего. В зависимости от поведения рандомайзера, в массиве могут оставаться целые последовательности неперемешанных элементов.

Если нужно качественное перемешивание массива, то я пользуюсь следующей функцией. Помню, что-то подобное мы делали на школьных уроках информатики.
  1. //-------------------------------------------------
  2. // Функция случайной сортировки массива
  3. //-------------------------------------------------
  4. function shuffle(ar) {
  5.     var jtmp;
  6.     for(var i=0i<ar.lengthi++) {
  7.         // Случайный индекс элемента для обмена
  8.         do {
  9.             j=parseInt(Math.random()*ar.length);
  10.         } while(i==j);
  11.         // Обменять местами два элемента массива
  12.         tmp=ar[i];
  13.         ar[i]=ar[j];
  14.         ar[j]=tmp;
  15.     }
  16.