Maison  >  Article  >  interface Web  >  Implémentation de la méthode de brassage de tableaux la plus efficace dans les compétences JavaScript_javascript

Implémentation de la méthode de brassage de tableaux la plus efficace dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:34:101988parcourir

La réorganisation d'un tableau signifie perturber l'ordre de tous les éléments du tableau.

Une méthode courante consiste à transmettre une fonction dans la méthode de tri native du tableau. Cette fonction renvoie aléatoirement 1 ou -1 pour atteindre l'objectif d'organiser aléatoirement les éléments du tableau.

Copier le code Le code est le suivant :

arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;});

Bien que cette méthode soit intuitive, elle n'est pas très efficace. D'après mon test, le temps nécessaire pour brouiller un tableau de 10 000 éléments est d'environ 35 ms (firefox)

J'ai toujours eu la qualité de demander des réponses, j'ai donc recherché une méthode efficace. Voir le texte original ici

Copier le code Le code est le suivant :

si (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
         renvoie ceci ;
};
>
arr.shuffle();

Cette méthode ajoute une fonction à Array.prototype appelée shuffle - mais le nom n'a pas d'importance, ce qui est important c'est son efficacité.

Prenez mon tableau ci-dessus de 10 000 éléments pour tester. Cela ne prend que 7 ou 8 millisecondes pour terminer l'opération dans le désordre en utilisant cette méthode.

Augmentez les éléments du tableau 10 fois jusqu'à 100 000 pour tester. La première méthode de tri prend environ 500 ms et la méthode de lecture aléatoire prend environ 40 ms.

Code de test complet :

Copier le code Le code est le suivant :

var nombre = 100000,arr = [];
pour(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);

//La méthode suivante est la plus efficace
si (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
         renvoie ceci ;
};
>
var t = new Date().getTime();
arr.shuffle();
document.write('
'arr'
');
var t1 = new Date().getTime();
document.write(t1-t);

De plus, avez-vous remarqué que la boucle for dans le code shuffle n'a pas la seconde moitié ! Autrement dit, il n'y a que for(..) mais pas de {..} derrière. Cela peut être écrit comme ça ! Et il s’exécute normalement ! C'est curieux, je dois aller au parc des blogs et demander.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn