Hallo Harry,
Nochmal der ganze Käse im Überblick:
[snip]
Jetzt sollte es funktionieren (ich hab leider immer noch keine Möglichkeit, das richtig auszuprobieren)
Hast Du doch, siehe unten.
[...] Code des Alg's, den ich empfehlen würde:
[snip]
Schaut mir auf den ersten Blick so ein bißl nach einer abgekürzten Schreibweise von meinem Ding aus ... Werd's bei Gelgenheit mal ausprobieren :-)
Isses nich, siehe Beispiel. Dein Code is ne Variante von Selection-Sort, und meiner is ne Variante von Bubble-Sort (hab extra noch mal nachgeguckt). Außerdem wird bei Dir das Array direkt sortiert (da die Positionen der Einträge geändert werden), und bei mir indirekt (die Einträge bleiben an ihren Positionen stehen und die Reihenfolge wird durch ein zusätzliches 1D-Rank-Feld definiert).
Der Selection-Sort hat die (für eineige Anwendungsfälle)unangenehme Nebenwirkung, daß bei Gleichheit von Werten die bisherige Reihenfolge teilweise verändert wird.
Gruß, Lutz
<HTML><HEAD></HEAD><BODY>
<script language="JavaScript">
var as=new Array(10);
//Algorithmus ala Lutz T.
var i,j,t,len=as.length
Rank=new Array(len)
for (i=0; i<len; i++) Rank[i]=i;
function SortAsc(spalte)
{ for (i=0; i<len-1; i++)
{ for (j=len-1; j>i; j--)
{ if (as[Rank[j-1]][spalte]>as[Rank[j]][spalte])
{ t=Rank[j-1];
Rank[j-1]=Rank[j];
Rank[j]=t;
}
}
}
}
function SortDesc(spalte)
{ for (i=0; i<len-1; i++)
{ for (j=len-1; j>i; j--)
{ if (as[Rank[j-1]][spalte]<as[Rank[j]][spalte])
{ t=Rank[j-1];
Rank[j-1]=Rank[j];
Rank[j]=t;
}
}
}
}
function Init()
{ for(i=0; i<as.length; i++)
{ as[i]=new Array(3);
as[i][0]=Math.floor(Math.random()*3)+1970;//Jahr
as[i][1]=Math.floor(Math.random()*6)+3;//Monat
as[i][2]=Math.floor(Math.random()*10)+10;//Tag
}
}
//Algorithmus ala Harry
var temparray = new Array();
var lastchangedj = "";
function asort(spalte)
{
for(i=0; i<as.length; i++)
{ ta(i);
lastchangedj=i;
for(j=i+1; j<as.length; j++)
{ if(temparray[spalte]>as[j][spalte])
{ lastchangedj = j;
ta(j); }
}
if(i!=lastchangedj) ch(i, lastchangedj);
at(i);
}
}
function ta(i)
{ for(j=0; j<as[i].length; j++)
temparray[j] = as[i][j]; }
function at(i)
{ for(j=0; j<temparray.length; j++)
as[i][j] = temparray[j]; }
function ch(i,j)
{ for(k=0; k<as[i].length; k++)
as[j][k] = as[i][k]; }
//Aufruf und Ausgabe
zn=new Array("Jahr","Monat","Tag");
document.open();
Init();
document.writeln("10 Geburtstage ungeordnet:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ document.writeln("<tr><td>"+zn[j]+"</td>");
for (i=0; i<as.length; i++)
document.writeln("<td>"+as[i][j]+"</td>");
document.writeln("</tr>");
}
document.writeln("</table>");
SortAsc(2);
SortAsc(1);
SortAsc(0);
document.writeln("10 Geburtstage geordnet nach Lutz T. (2,1,0) mittels Bubble-Sort:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ document.writeln("<tr><td>"+zn[j]+"</td>");
for (i=0; i<as.length; i++)
document.writeln("<td>"+as[Rank[i]][j]+"</td>");
document.writeln("</tr>");
}
document.writeln("</table>");
asort(2);
asort(1);
asort(0);
document.writeln("10 Geburtstage geordnet nach Harry (2,1,0) mittels Selection-Sort:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ document.writeln("<tr><td>"+zn[j]+"</td>");
for (i=0; i<as.length; i++)
document.writeln("<td>"+as[i][j]+"</td>");
document.writeln("</tr>");
}
document.writeln("</table>");
document.close();
</script>
</BODY></HTML>