|
< 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
|