Gernot Back: Zahlen von eins bis 16 in zufälliger Reihenfolge - Array mischen

Beitrag lesen

Hallo Struppi,

  

> function mischen(array, anzahl)  
> {  
>     if(!anzahl || anzahl < 0) anzahl = 1;  
>     while(anzahl--)  
>     {  
>          for(var i = 0; i < array.length; i++)  
>          {  
>               var index = parseInt( Math.random() * array.length - 1);  
>               var tmp = array[index];  
>               array[index] = array[i];  
>               array[i] = tmp;  
>          }  
>     }  
> }  

Neidlos muss ich eingestehen, dass du auf jeden Fall eine Rechenoperation weniger in deiner For-Schleife hast. Meine Array-Manipulationen verursachen intern wahrscheinlich auch einen bedeutend höheren Rechenaufwand.

Auf deine while-Schleife und den Parameter anzahl könntest du aber doch auch noch verzichten, oder was versprichst du dir von mehreren Mischdurchläufen, wenn doch in jedem Fall kein einziges der Members unberührt bleibt?

Ich könnte mir sogar im Gegenteil bei deiner Variante auch noch vorstellen, den Increment in Zweierschritten laufen zu lassen, also i+=2, denn bei jedem deiner Schleifendurchläufe sind ja zwei Array-Members betroffen. Die übersprungenen Members wären dann allerdings nur mit halb so hoher Wahrscheinlichkeit von der Veränderung betroffen wie die nicht-übersprungenen.

Was meine Würfel-Funktion betrifft; diesen Aufwand habe ich mal vor Zeiten für Netscape 4.7 eingebaut, der die Eigenheit hatte, bei einer einfachen Random-Funktion auch zuweilen ein 'undefined' oder einen negativen Wert zurückzuliefern.

  

> > function rollDice () {  
> >   var num = -1;  
> >   do {  
> >     num = parseInt(Math.random()* myArray.length);  
> >   } while((isNaN(num))||(num<0));  
> >   return num;  
> > }  

Gruß Gernot