Rene: Array nach Zufall neu sortieren

Hallo zusammen,

kann mir jemand sagen, wie ich ein Array so sortieren kann, dass jedesmal eine neue, zufällige Sortierung erfolgt?

Herzlichen Dank und Gruss
Rene

  1. Hallo Rene,

    kann mir jemand sagen, wie ich ein Array so sortieren kann, dass jedesmal eine neue, zufällige Sortierung erfolgt?

    Sortieren weis ich nicht so genau, aber vielleicht hilft Dir der Ansatz "neu füllen" ein Muster findest Du unter
    <http//www.jelue.de/puzzle2/puzzle_ok.htm>
    Hinweis: Die Logik dürfte überall funktionieren, die Seite selber ist eine Spielerei mit dem Table-Objekt vom IE daher wird das Anzeigen nicht überall klappen.
    Allerdings kommt es dabei ab und an zu Problemen, wenn eine größere Datenmenge im Spiel ist. Bei 49 Einträgen scheint die Logik zur Bestimmung des Zufallswertes nicht immer hinzuhauen.
    Grundsätzlich funktioniert es aber.
    Gruß
    Günter

  2. als anregung (nicht getestet):

    function sort(a)
    {
     res = new Array();
     while(a.length > 0)
     {
      i = Math.Round(Math.Random()*(a.length-1));
      res[res.length] = a[i];
      a = Delete(a,i)
     }
     return(a);
    }

    function Delete(a,i)
    {
     for(j=i;j<a.length-1;j++){a[j] = a[j+1];}
     a.length = a.length-1;
     return(a);
    }

    gruss,
    frank_eee.

  3. Hallo
    Hab spontan eine Idee für eine Sortierschleife. Ich nehm mal an, dass das Array myArray heisst.

    var x; //So oft werden zwei Werte vertauscht
    var tmp; //Variable für temp. Daten
    var myArrLength; //Länge des Arrays
    var pos1; //1. Position im Array
    var pos2; //2. Position im Array
    x = 100;
    myArrLength = myArray.length;

    for(i = 0;i < x;i++) {
     //Zufallszahlen zwischen 0 und 1 mal Läge des Arrays
     pos1 = Math.random() * myArrLength;
     pos2 = Math.random() * myArrLength;
     //Auf Ganzzahl runden
     pos1 = Math.round(pos1);
     pos2 = Math.round(pos2);
     //Werte in pos1 und pos2 vertauschen
     tmp = myArray[pos1];
     myArray[pos1] = myArray[pos2];
     myArray[pos2] = tmp;
    }

    Habs kurz getestet: Trägt von Zeit zu Zeit einen Wert nicht wieder korrekt in das Array ein. Probier mal selber herauszufinden, woran dies liegt (ev. an Zufallszahl). Sonst funktioniert es.

    mfg

    Thomas

    1. Hallo Thomas,

      Herzlichen Dank für Deine Bemühung. Eben habe ich noch gelesen, dass math.random nicht auf allen Platformen richtig oder gar nicht funktioniert. Wie gewöhnlich die üblichen Stolpersteine die uns doch immer wieder "Freude" bereiten (UFF!).

      Ich werde Deine (und auch die anderen Antworten) noch Testen und hoffentlich eine wunderbare Lösung hinbekommen <schwitz>.

      Als Info.. die Routine möchte ich auf meiner Homepage (www.poke.ch) unter "Freunde" einsetzen. Wenn Du Dir den Code ansiehst, findest Du mein Array-Script.

      Danke und Gruss
      Rene

  4. hi Rene

    kann mir jemand sagen, wie ich ein Array so sortieren kann, dass jedesmal eine neue, zufällige Sortierung erfolgt?

    interessante Aufgabe, kann man sicherlich für kleine Spielchen gut gebrauchen...Schwierig fand ich, das richtige Array-Element zu löschen. (getestet auf IE6)

    <html><head></head>
    <script type="text/javascript">
    function sortieren(){
             AlteWerte = new Array("albert","bettina","carsten","dora");
             NeueWerte = new Array();
             laenge=AlteWerte.length;
             for(i=0;i<laenge;i++){
                    zufall=parseInt(Math.random()*AlteWerte.length);
                    NeueWerte.push(AlteWerte[zufall]);
                    AlteWerte[zufall]=null;
                    AlteWerte.sort();
                    AlteWerte.pop();

    }
             alert(NeueWerte.join(","));
    }
    </script><body><form>
    <input type=button value="sortieren" onClick="sortieren()">
    </form></body></html>

    viel Spass damit
    Dein Onkel

  5. hi,

    hab was rumfliegen:

    Gruesse  Joachim

    <HTML>
    <HEAD>

    <TITLE>Zufall</TITLE>

    <SCRIPT LANGUAGE="JavaScript">

    Zahlen = new Array(1,2,3,4,5,6,7,8,9,10,11,12);

    function zufall() {
     return (Math.random() - Math.random());
    }

    function lotto() {
     Zahlen.sort(zufall);
     Zahlenausgabe = Zahlen.join(",");
     document.spiel.ausgabe.value="Die Zahlenreihe lautet: " + Zahlenausgabe;
    }

    </SCRIPT>

    </HEAD>
    <BODY BGCOLOR="#FFFFFF">

    <BR>
    Die Zahlen von 1 - 12 in zufälliger Reihenfolge!
    <BR>

    <FORM NAME="spiel">
     <INPUT NAME="ausgabe" TYPE=Text VALUE="Wie lautet Deine Glückszahl?" SIZE="70">
     <INPUT NAME="button" TYPE=Button VALUE="go" onClick="lotto()">
    </FORM>

    </BODY>
    </HTML>