Demogracia Bits

• • • Colección privada de recortes de código y documentación para programación web

[Sí, aún estamos en pruebas; ¿por?]

Aleatorizar un array

Permutar, barajar, desordenar... Llámenlo como quieran, pero si necesitan alterar aleatoriamente el orden de un array éste es su recorte. La función no devuelve nada ya que el argumento se pasa por referencia (o sea, se modifica el original).

/*
 * Aleatoriza un array según el algoritmo de Fisher-Yates
 */

function fisher_yates(array){ // v2005-06-01
    var i=array.length;
    while(i--){
        var j=Math.floor( Math.random() * (i+1) );
        var tmp=array[i];
        array[i]=array[j];
        array[j]=tmp;
    }
}

El mérito (o desmérito) del algoritmo se lo debemos a R. A. Fisher y F. Yates, a quienes me imagino con sus gafas de culo de vaso y su barbita rubia llenando de garabatos una enorme pizarra en alguna universidad del medio oeste.

Ejemplo de uso

var foo=new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

document.write('<p>' + foo.join(', ') + '</p>');
fisher_yates(foo);
document.write('<p>' + foo.join(', ') + '</p>');

Esta página ha sido impresa el domingo 6 de julio de 2008 (22:50:02 +0200) desde http://bits.demogracia.com/recortes/javascript/fisher-yates.html, contenía HTML válido con CSS fresquito la última vez que lo miré y no debería tener flatas de ortografía.

Demogracia Bits no tiene absolutamente ninguna relación con Demogracia, salvo el nombre, el dominio punto com y que el autor es el mismo.

© 2005-2008 by Álvaro G. Vicario (alvaro.es) ¤ Burgos (España) ¤ http://bits.demogracia.com/