nikolausdulgeridis
  AlgoMischen
 

Algorithmus Mischen

Über Sortieralgorithmen gibt es Buecher, Vorlesungen und wissenschaftliche 
Abhandlungen. Geht es um den umgekehrten Vorgang -das Mischen- hat man Schwierigkeiten das 
Wort überhaupt zu googeln. 

Folgende einfache Verfahren sind bewährt:
  • Ziehe eine zufaellige Karte aus Stapel A und lege sie auf Stapel B.
  • Vertausche die erste Karte mit einer zufälligen Karte aus dem Deck, dann die zweite usw.
Man kann auf die Idee kommen, zur Sicherheit ein zweites Mal zu mischen. 
Das ist nicht erforderlich, der Algorithmus ist von der Sortierung zu Beginn nicht abhängig. 
Es schadet allerdings auch nicht, der Aufwand bleibt linear.

 
JavaScript Beispiel
 /* Scramble 1 */
 var stapelA= new Array(1,2,3,4); 
 var stapelB= new Array(); 
 for ( ; stapelA.length > 0 ; )
   {
     var zuf= Math.floor(Math.random()*(stapelA.length)); /* zufaellige Karte */
     stapelB.push(stapelA[zuf]);                          /* lege auf Stapel B */
     stapelA[zuf]= stapelA[stapelA.length-1]              /* entferne die Karte aus Stapel A */
     stapelA.pop();
   }

/* Scramble 2 */
 var stapelA= new Array(1,2,3,4); 
 for ( var i= 0; i< stapelA.length ; i++ )
   {
     var zuf= Math.floor(Math.random()*(stapelA.length));     /* zufaellige Karte */     
     stapelA[i] += stapelA[zuf] - (stapelA[zuf]= stapelA[i]); /* tausche */     
   }
 alert (stapelA);

Beispielausgabe

 
  5 Besucher