Hoi !
Hallo,
ich schätze mal, das wird nicht gehen.
Problem: eine DB wird in einem mehrdimensionalen Array gespeichert.
// as: array zum sortieren
temparray = new array();
function asort(spalte)
{
for(i=0; i<as.length; i++)
{ ta(i);
danach ist temparray[i]=as[i]
for(j=i+1; j<as.length; j++)
{ if(temparray[i][spalte]>as[i][spalte])
ist stets gleich, da temparray[i]=as[i]
ta(j); }
wird nie ausgeführt
at(i);
schreibt temparray[i] wieder nach as[i]
}
-> Array hat hinterher die gleiche Reihenfolge, wie vorneweg
function ta(i)
{ for(j=0; j<as[i].length; j++)
temparray[i][j] = as[i][j]; }
function at(i)
{ for(j=0; j<temparray.length; j++)
as[i][j] = temparray[i][j]; }
Diese funktion würde das zweidimensionale Array "as" alphabetisch nach dem Inhalt von "spalte" sortieren. Keine Ahnung ob's geht,ich kann's hier leider nicht ausprobieren.
Ciao,
Harry
Ich würde die Arrays auch nicht direkt sortieren, denn wenn viele Spalten da sind, wird das ziemlich langsam, sondern ein zusätzliches eindimensionales Reihenfolge- oder Rank-Array erzeugen. Es ist noch zu beachten, daß es verschiedene Sortieralgorithmen gibt und die schnellsten sind dabei nicht unbedingt die _besten_. Für deine Zwecke ist es sicherlich sinnvoll, einen Sortieralgorithmus zu verwenden, bei dessen Anwendung die bisherige Sortierung beim Auftreten gleicher Werte erhaltenbleibt. Das brauchst Du z.B. wenn Du nach geburtstag sortieren willst, und die drei Spalten Jahr, Monat und Tag hast. Dann sortiere zuerst das Array nach Tag. Danach nimm das Array von neuem und sortiere nach Monat und dann sortiere wieder von neuem nach Jahr, und heraus kommt ein Array das nach Geburtstag sortiert ist. Bei den schnellsten Algorithmen Quicksort und Mergesort würde das nicht klappen, weil die die Reihenfolge beim Sortieren bei gleichen Werten nicht unverändert lassen, deshalb wäre da einer von den _klassischen_ Algorithmen Insertion- Selection- oder Bubble-Sort vorzuziehen. Ich weiß jetzt nicht genau, welcher Algorithmus wie heißt (verwechsle das immer und bin jetzt zu faul um aufzustehen und in einem Buch nachzugucken), im folgenden ist jedenfalls mal der Code des Alg's, den ich empfehlen würde:
var i,j,t,len=Array2D.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 (Array2D[Rank[j-1]][spalte]>Array2D[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 (Array2D[Rank[j-1]][spalte]<Array2D[Rank[j]][spalte])
{ t=Rank[j-1];
Rank[j-1]=Rank[j];
Rank[j]=t;
}
}
}
}
Wenn Du ein Array zur Hand hast, kannst Du das gleich mal testen mit
SortAsc(0);
for (i=0; i<len; i++) alert(i+": "+Array2D[Rank[i]][0]);
SortDesc(0);
for (i=0; i<len; i++) alert(i+": "+Array2D[Rank[i]][0]);
Die Werte müßten dann zuerst steigend und dann fallend geordnet sein, wenn ich mich nicht vertan habe.
Gruß, Lutz.