M
moerbi
Gast
Hey ihrs!
Hatte die Aufgabe, den Radixsort grob zu programmieren. Dabei war es egal, ob ich nun nur Zahlen mit 2 oder mit 20 Stellen vergleiche, ich sollte das Prinzip veranschaulichen. Gesagt, getan, vorgestellt. Jedoch wollte ich es dann auch genau programmieren und finde nun seit Tagen den Fehler nicht. Werde wahrscheinlich einfach ein Brett vor dem Kopf haben.
Ja, ich hätte auch Vektoren benutzen können, jedoch spielte der Speicherplatz erstmal keine Rolle
Soweit werden auch keine Fehler angezeigt, die Zahlen jedoch auch in genau der gleichen Reihenfolge ausgegeben, dh. nichts sortiert.
Code ist an sich ausreichend kommentiert, jedoch noch was zu meiner Rechnung beim case:
( a[n]%(10^s)-a[n]%(10^(s-1)) )/ (10^(s-1))
Ich will ja nach der s.en Stelle sortieren. Also z.B. bei 19,23,44 und 59 nach den Einern, ergo müssten 19 und 59 in die 9, 44 in die 4 und 23 in die 3. Mein Informatikdozent fand das auch ne gute Idee, es so zu machen, aber vllt ist ja hier doch was falsch?..
Daher hoffe ich auf Eure Unterstützung und einem kleinen Tipp, wo ich nun vielleicht was missverstanden habe.
Liebe Grüße, Stefan
Hatte die Aufgabe, den Radixsort grob zu programmieren. Dabei war es egal, ob ich nun nur Zahlen mit 2 oder mit 20 Stellen vergleiche, ich sollte das Prinzip veranschaulichen. Gesagt, getan, vorgestellt. Jedoch wollte ich es dann auch genau programmieren und finde nun seit Tagen den Fehler nicht. Werde wahrscheinlich einfach ein Brett vor dem Kopf haben.
Ja, ich hätte auch Vektoren benutzen können, jedoch spielte der Speicherplatz erstmal keine Rolle
Soweit werden auch keine Fehler angezeigt, die Zahlen jedoch auch in genau der gleichen Reihenfolge ausgegeben, dh. nichts sortiert.
Code ist an sich ausreichend kommentiert, jedoch noch was zu meiner Rechnung beim case:
( a[n]%(10^s)-a[n]%(10^(s-1)) )/ (10^(s-1))
Ich will ja nach der s.en Stelle sortieren. Also z.B. bei 19,23,44 und 59 nach den Einern, ergo müssten 19 und 59 in die 9, 44 in die 4 und 23 in die 3. Mein Informatikdozent fand das auch ne gute Idee, es so zu machen, aber vllt ist ja hier doch was falsch?..
Daher hoffe ich auf Eure Unterstützung und einem kleinen Tipp, wo ich nun vielleicht was missverstanden habe.
Liebe Grüße, Stefan
Java:
public class radixsort {
public static void main(String args[]) // Hauptmethode
{
radixsort r=new radixsort(); // Anlegen des Objektes r der Klasse radixsort
int a[]=new int[]{17,89,23,49,11,32,66}; // hier die Zahlen, die sortiert werden sollen
r.rsort(a);
r.ausgabe(a);
}
public void rsort(int a[]) // Sortiermethode mit dem Array a als Parameter
{ int count=0; // count als Zähler
int tabelle[][]=new int[a.length][10]; // tabelle[][] als Array, um unsere Zahlen neu abzuspeichern. Die Zeilenlänge
// muss a.length sein, da max. so viele Zahlen in eine Spalte eingefügt werden
// können. Die Spaltenlänge beträgt 10, da wir nach 0,1,2...9 sortieren.
for(int s=1;s<=2;s++) // SORTIERPHASE; s für die Stelle, die wir überprüfen wollen
{
this.nullsetzen(tabelle); // Tabelle wird wieder geleert, da eine neue Stelle geprüft wird
for(int n=0;n<a.length;n++) // n für die n.e Zahl von a
{
switch(( a[n]%(10^s)-a[n]%(10^(s-1)) )/ (10^(s-1))) //Berechnung der s.Stelle der n.Zahl von a von
{ // hinten nach vorne; bei s=2, n=2 z.B.
// die 2.letzte Stelle der 2.Zahl von a
case 0: tabelle[n][0]=a[n]; break; // wenn berechnung 0 ergibt, wird die Zahl in die Tabelle bei der Spalte "0" hinzugefügt
case 1: tabelle[n][1]=a[n]; break; // wenn berechnung 1 ergibt, wird die Zahl in die Tabelle bei der Spalte "1" hinzugefügt
case 2: tabelle[n][2]=a[n]; break; // ebenso für den Rest
case 3: tabelle[n][3]=a[n]; break;
case 4: tabelle[n][4]=a[n]; break;
case 5: tabelle[n][5]=a[n]; break;
case 6: tabelle[n][6]=a[n]; break;
case 7: tabelle[n][7]=a[n]; break;
case 8: tabelle[n][8]=a[n]; break;
case 9: tabelle[n][9]=a[n]; break;
default: System.out.print("Default? "); break;
}
}
//this.ausgabet(tabelle);
for(int p=0;p<tabelle[0].length;p++) // SAMMELPHASE, z für die Zeilen
{
for(int z=0;z<a.length;z++) // p für die sPalten
{
if((tabelle[z][p]!=0)&&(count<a.length))
{
a[count]=tabelle[z][p];
count ++;
}
}
} //Ende Sammelphase, s wird 1 höher gesetzt
}
}
public void nullsetzen(int a[][]) // Methode zum leeren der Tabelle
{
for(int i=0;i<a.length;i++)
{
for(int z=0;z<a[0].length;z++)
{
a[i][z]=0;
}
}
}
public void ausgabe(int a[]) //Methode zum Ausgeben von a
{
for(int n=0;n<a.length;n++)
{
System.out.print(a[n]+", ");
}
}
public void ausgabet(int a[][])
{
for(int z=0;z<a.length;z++)
{
for(int i=0;i<a[0].length;i++)
{
System.out.print(a[i][z]+"\t"); // print=keine neue Zeile! \t:Tab
}
System.out.print("\n");
}
}
}