Показать сообщение отдельно
  #24 (permalink)  
Старый 26.12.2015, 18:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function indRand(a){
     var out=[],n=a.length; a=a.slice(0);
     while (n--){out.push(a.splice(Math.floor((n+1)*Math.random()),1)[0]);}
     return out;
  }
var tim = +new Date
var arr='1234567890'.split('');

n=1000000;
while (n--){
  var b = indRand(arr);
}

alert((+new Date-tim)/1000);


Array.prototype.shuffle = function(min,max) {
  min = min || 0;
  max = ++max || this.length;
  var len = max - min;
  max = len - this.length;
  this.length = len;
    for (var a = this.length-1; 0 <= a; a--) {
       if(a < max) {break}
        var b = Math.floor(Math.random() * a),
            c = void 0 === this[b] ? (b + min) : this[b];
            this[b] = void 0 === this[a] ? (a + min) : this[a];
            this[a] = c
    }
    this.reverse();
    this.length -= max;
    return this
};

var tim = +new Date
var arr='1234567890'.split('');

n=1000000;
while (n--){
  var arr =arr.shuffle();
}

alert((+new Date-tim)/1000);

Твой Вариант значительно быстрее!
Гы, а на длинных массивах, длиной более 100, преимущество в 8 и более раз!

Последний раз редактировалось Deff, 26.12.2015 в 19:06.
Ответить с цитированием