borrame.com - Colección particular de recortes de código y documentación para programación web

Lo más fresco

  1. Cadena aleatoria en PHP (¡ahora también multi-byte!) Modificado
  2. Cookies en JavaScript Modificado
  3. Reiniciar Apache con cuidado (graceful restart) Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Cookies
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)

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 jueves 29 de julio de 2010 (21:27:33 +0200) desde http://borrame.com/recortes/javascript/fisher-yates.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2010 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com