Lutz T.: Mehrdimensionalen Array sortieren

Beitrag lesen

Hoi !

Hallo Harry,

Jetzt sollte es funktionieren (ich hab leider immer noch keine Möglichkeit, das richtig auszuprobieren)
Hast Du doch, siehe unten.

Ne :-) Ich sitz nämlich an einem Internetterminal, von dem aus ich zur Zeit keine Seiten editieren kann, und von dem aus ich auch lokal keinen Zugriff auf die Platte hab (ohne mich durch irgendwelche Tricks unbeliebt zu machen ;-)

Ich hab da mal was programmiert, nämlich einen online-code-tester, aufrufbar unter < www.tu-chemnitz.de/~luta/codetest.html> da kannst Du den folgenden code unten reinpacken und ausprobieren.
Ich denke, das Progrämmchen könnte man eigentlich auch auf den SELFHTML-Server stellen, für Leute wie Dich ohne lokalen Plattenzugriff wäre das bestimmt eine Hilfe.

Aber vielen Dank für den Code, werd ich dann mal ausprobieren. Aus welchem Buch hast Du den, das klingt nämlich recht interessant :-)

Das Buch heißt 'Kopf', da sind so einige Codes drin, und das allerbeste: da kommen auch abundzu Codes raus, die vorneweg gar nicht reingesteckt wurden.
Bei den Bezeichnungen der Algorithmen hab ich mir ein bißchen von Google helfen lassen(Suchbegriff: 'Insertion Selection Bubble Sort')

Ciao,

Harry

Gruß Lutz

Hier noch der JavaScript-Code zum Online-Testen:
-------------------------------------------------

var as=new Array(10);

//Algorithmus von 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 von 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");
var win=window.open('','');
win.document.open();
win.document.write("<html><head></head><body>");
Init();
win.document.writeln("10 Geburtstage ungeordnet:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ win.document.writeln("<tr><td>"+zn[j]+"</td>");
  for (i=0; i<as.length; i++)
    win.document.writeln("<td>"+as[i][j]+"</td>");
  win.document.writeln("</tr>");
}
win.document.writeln("</table>");
SortAsc(2);
SortAsc(1);
SortAsc(0);
win.document.writeln("10 Geburtstage geordnet nach Lutz T. (2,1,0) mittels Bubble-Sort:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ win.document.writeln("<tr><td>"+zn[j]+"</td>");
  for (i=0; i<as.length; i++)
    win.document.writeln("<td>"+as[Rank[i]][j]+"</td>");
  win.document.writeln("</tr>");
}
win.document.writeln("</table>");
asort(2);
asort(1);
asort(0);
win.document.writeln("10 Geburtstage geordnet nach Harry (2,1,0) mittels Selection-Sort:<table border cellspacing=0>");
for (j=0; j<3; j++)
{ win.document.writeln("<tr><td>"+zn[j]+"</td>");
  for (i=0; i<as.length; i++)
    win.document.writeln("<td>"+as[i][j]+"</td>");
  win.document.writeln("</tr>");
}
win.document.writeln("</table>");
win.document.writeln("</body></html>");
win.document.close();