Home
Scripts
Games
Referenz
     Basics:
   · Variablen
   · Datentypen
   · Operatoren
   · Funktionen
   · Pragmas
   · if else
   · while
   · for
     Libraries:
   · Lang
   · Float
   · String
   · URL
   · WMLBrowser
   · Dialogs
   · Crypto
   · WTAPublic
     Extras:
   · Arrays
   · Sortieren
   · Mathematik
Links
Gäste
Kontakt

< Sortieren >


Eine Sortier-Funktion mit WMLScript.

WAP-Standard: 1.1+

Sei folgende Startfunktion mit zu sortierendem String gegeben:

extern function init() {
  var s = "Horst:1.73m Lisa:1.56m Franz:2.01m Marie:1.78m";
  sort(s);
}

Und die Hilfs-Funktionen zum Auslesen und Verändern des Arrays s definiert:

function str(s,i) {
  return String.elementAt(s,i," ");
}
function val(s,i) {
  var y = String.elementAt(s,i," ");
  return Lang.parseFloat(String.elementAt(y,1,":"));
}
function rep(s,i,v) {
  return String.replaceAt(s,v,i," ");
}

//str(s,i) ist der i-te Teil-String in s.
//val(s,i) ist der Wert im i-ten Teil-Strings in s.
//Mit rep(s,i,v) wird in s der i-te Teil-String durch v ersetzt.

Dann kann mittels der Sortierfunktion sort(), jedes Element mit jedem anderen verglichen und gegebenenfalls deren Positionen im String vertauscht werden.

function sort(s) {
  var i, k, x;

  for(i=0;i<5;i++) {
    for(k=i+1;k<6;k++) {
      if(val(s,i)>val(s,k)) {
        x = str(s,i);
        s = rep(s,i,str(s,k));
        s = rep(s,k,x);
      }
    }
  }
}

// s == "Lisa:1.56m Horst:1.73m Marie:1.78m Franz:2.01 m"

Die vier Elemente in diesem Beispiel, wären natürlich codesparender zu sortieren gewesen.
Ein Vergleich "jeder mit jedem" hätte hier bedeutet:
1 mit 2 vergleichen,
1 mit 3 vergleichen,
1 mit 4 vergleichen,
2 mit 3 vergleichen,
2 mit 4 vergleichen und
3 mit 4 vergleichen,
d.h. 3+2+1 = 6 Vergleiche.

Bei nur zehn Elementen wären das aber schon:
9+8+7+6+5+4+3+2+1 = 45,
und bei 20 Elementen:
19+18+17+...+3+2+1 = 190,
also schon recht lohnend für obiges Script.




Copyright © 2002-2003 by wmlscript.de - Alle Rechte vorbehalten
Impressum | Datenschutz | eMail