Come si realizza il mescolamento casuale di un array

Il metodo che sto per mostrarti è definito come “algoritmo per una permutazione casuale di un insieme finito“, ideato da Ronald Fisher e Frank Yates, ed ottimizzato successivamente. Esistono molti algoritmi che eseguono compiti molto diffusi e di conseguenza già discussi e pensati da altri sviluppatori. Per lo scopo di questa guida, dovrai tenere sempre sotto traccia l’algoritmo riportato più avanti nell’articolo.

Il procedimento è semplice, alla riga 9 viene dichiarato e definito un array ordinato di elementi numerici da 1 a 10. Dalla riga 12 alla 18, tale array viene mescolato con elementi memorizzati in posizioni, elaborate in modo casuale, diverse da quelle definite alla riga 9.

Cioè alla riga 10 viene generato un numero casuale da 0 a (10–1), questo perchè in quasi tutti i linguaggi di programmazione C like, gli array iniziano dalla posizione 0 e non dalla 1, per cui un array di 10 elementi inizia alla posizione 0 e termina alla posizione 9.

Alla riga 16, il valore dell’array, processato di volta in volta dalla 0 alla 9, viene scambiato con il valore dell’array alla posizione casuale.

Dalla riga 21 alla 23, l’array viene stampato a video.

Il seguente è un esempio in Javascript, potrai copiare ed incollare il codice sottostante in un file, ad esempio “index.html”, ed eseguirlo tramite Chrome o qualsiasi altro browser, per cui non hai bisogno di un compilatore o di un interprete.

<html>
   <head>
      <title>Mischiare un Array in Javascript</title>
   </head>
   <body>
      <p>
         <script language="javascript" type="text/javascript">
            //array ordinato di valori
            var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; 
 
            // mescola array
            for(var k=0; k<a.length; k++) {
               posizioneCasuale = Math.floor(Math.random() * k); 
               // scambia a[k] con a[posizioneCasuale]
               tmp = a[k];
               a[k] = a[posizioneCasuale];
               a[posizioneCasuale] = tmp;
            }
 
            // stampa array disordinato randomicamente
            for (var i=0; i<a.length; i++) {
               document.write("Elemento " +i+ " = " +a[i]+ "<br />");
            }
         </script> 
      </p> 
   </body>
</html>

LEGGI ANCHE: Il miglior modo di fare pratica come sviluppatore web

Non ho la pretesa di rivelarti, oggi, il segreto per diventare uno sviluppatore web di successo. Ma posso indicarti la strada giusta per diventarlo.

Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice. Scopri di più....

x