Radixsort-Problem

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

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");
		}
	}

}
 
S

SlaterB

Gast
du postest lieber ein 15 Zeilen + Code im Forum, was sicher 15 Min. dauert und jetzt schon 30 Min. Wartezeit
bevor du auch nur irgendwas selber versuchst herauszufinden, die geringsten Anstrengungen unternimmst?
dieses Vorgehen mit dann entsprechender Zeitverschwendung kann ich nie verstehen..

vielleicht lernst du ja daraus wieviel effektiver es doch ist, den eigenen Kopf zu benutzen,

möglicherweise hast du auch schon irgendwas gemacht, richtig sinnvolles kann es aber nicht gewesen sein,
das korrekte Vorgehen lautet:
anschauen was das Programm macht!

eine ganz entscheidende Stelle hast du ja schon angesprochen, diese eine komplizierte Berechnung,
übrigens kann dein langes switch entfallen:
Java:
                int k = (a[n] % (10 ^ s) - a[n] % (10 ^ (s - 1))) / (10 ^ (s - 1));
                System.out.println("s: " + s + ", n: " + n + ", k: " + k);
                if (k < 0 || k > 9)
                {
                    System.out.print("Default? ");
                }
                else
                {
                    tabelle[n][k] = a[n];
                }
tuts genauso,

entscheidend zur Problemlösung ist die System.out.println()-Zeile, anschauen was das Programm macht!,
welch ein unerwarteter Hinweis anscheinend, von nun an bis ans Ende aller Zeiten berücksichten und kein Problem ist mehr unlösbar

das k ist bisher immer 0, für alle s und alle n, also ist ein Fehler klar gefunden/ eingegrenzt,
da du ja ungefähr verstehst was die Zeile machen soll, ich selbst jetzt noch kaum, könntest du die Zeile weiter zerlegen,
dir Zwischenwerte wie [c]a[n] % (10 ^ s)[/c] einzeln anschauen, irgendwo muss ja der Fehler reinkommen

das Problem, bei welchem du letztlich stecken bleiben könntest, ist schließlich "^ rechnet nicht so wie erwartet",
auch das könntest du theoretisch noch selber ergründen, aber gut, das kann auch ein Forum wissen:
^ ist eine Bitoperation, für Potenzrechnung gibt es nur Math.pow(),
bzw. du könntest dir auch Konstanten anlegen, es geht ja nur um die Faktoren 1, 10 und 100


Java:
int hoch1 = (s == 1 ? 10 : 100);
int hoch2 = (s == 1 ? 1 : 10);

int k = (a[n] % hoch1 - a[n] % hoch2) / hoch2;

danach sortiert es noch nicht unbedingt richtig,
prüfe nun bitte selber, ob k ok ist, was dann mit a[n] passieren soll, wo es einsortiert, später weiterverwendet wird usw.,
du kannst den Wert jedes einzelnen Elementes genauestens verfolgen,
jede Programmentscheidung mit Papierrechnung vergleichen,
nichts ist schwer, nur Fleiß
 
Zuletzt bearbeitet von einem Moderator:
M

moerbi

Gast
Danke für die Hilfestellung, werde es so mal probieren.

Ich sitze seit einer Woche an diesem Code, bin ein totaler Anfänger in Java. Da tut es mir leid, wenn ich dann irgendwann einfach nicht mehr weiter weiß und mir Hilfe in dem Forum suche. Mir zu unterstellen, ich würde meinen Kopf nicht einschalten, und lieber faul in ein Forum posten, finde ich traurig.

Aber wie gesagt, danke dir für deine Hilfe, ich werds weiter versuchen.
 
S

SlaterB

Gast
ich unterstelle nichts, ich beschreibe Tatsachen,
gerade weil du vielleicht von irgendwas verwirrt bist, was auch immer, schüttle ich deinen Kopf und weise dich auf das Wesentliche hin,

es ist unmöglich faul sondern einfach nur planlos, komplizierte Zeilen wie [c] a[n]%(10^s)-a[n]%(10^(s-1))[/c] zu coden,
aber nicht an System.out.println() zu denken,
du wirst als Programmierer vielleicht 4 Mio. verschiedene Zeilen schreiben, aber hinter jede einzelne gehört im Zweifelsfall System.out.println(),
einfacher geht es nicht um die allermeisten (einfachen) Probleme spielend aufzulösen

(immer zu nennende Alternative: Debugger)
 
Zuletzt bearbeitet von einem Moderator:
M

moerbi

Gast
Dann nochmal danke dir, werde das mim Anzeigen jeder Zeile beherzigen.
Wie gesagt, großes, blödes Brett vorm Kopf.

Gruß, Stefan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Radixsort mit String Java Basics - Anfänger-Themen 1
C Hilfe bei Radixsort Java Basics - Anfänger-Themen 2
D Comparable - Bucketsort / Radixsort? Java Basics - Anfänger-Themen 2
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
F Problem mit Listen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben