Quicksort Problem

Shibas

Mitglied
Moin,

ich hab die Aufgabe bekommen den Quicksort Algorithmus nachzubauen, nerviger weise funktioniert meine version hinten und vorne nicht. Er wählt bei der verkleinerung der liste ein neues pivot element aber tauscht nie.


Java:
package core;

public class Sort {


	
public Sort()
{
	
}
//initialisierung
int links = 0;
int rechts = 0;
int pivot = 0;
double mitte = 0;
int länge = 0;
int i = 0; 
int j = 0; 
int k = 0; 
Daten temp=null;


//Sortier Algorithmus	
public Daten[] quicksort(Daten[] db)
{

länge=db.length-1;		

//sortierung links-------------------------------------------------------------------------------------
while(länge != 0)
{
	mitte=Math.ceil(länge/2);	
	länge=(int) mitte;
	pivot = db[(int) mitte].value[0];
	System.out.println("Pivot: "+db[(int) mitte].wort);

	k=0;
	while(i<j)
	{

//Finde Element größer Pivot
		i=0;
		while (db[i].value[0] < pivot && i < mitte-1)
			{
			i++;
			}	
		links=i;




//Finde Element kleiner Pivot
		j=db.length-1;

		while(db[j].value[0] > pivot && j > mitte)
		{

			j--;
		}
		rechts=j;	
	
//elemente vertauschen
		if(i<j)
		{	
			
			System.out.println("tausch");
			temp = db[links];
			db[links]=db[rechts];
			db[rechts]=temp;
			
		}

	k++;
	}	
}	


	

//Sortierung Rechts	------------------------------------------------------------------------

	
	
return db;
	
}
	
	
}

Der Code ist nur für die linke seite aber selbst da müsste sich ja nach den ersten durchläufen was tun.

Währe nett wenn mir einer sagen könnte wo ich da mist verbockt habe.


mfg

Shibas
 
keine Motivation, den Fehler selber zu finden?
in Zeile 35 hast du ein so schönes System.out.println(),
wieso machst du danach nicht weiter, prüfst jede Einzelheit des Codes danach,
was sind i, j am Anfang, welche Werte links, rechts werden gefunden, notfalls jeden Vergleich bis dahin einzeln

du hast doch sicher ein Beispiel was du dir mit deinen Augen angeschaut hast,
du siehst auch dass das Programm das richtige Pivot wählt, du weiß inzwischen sicher ziemlich genau, welche zwei Elemente als erstes vertauscht werden müssten,
du weißt welche Elemente davor links und rechts vielleicht übersprungen werden weil der Vergleich mit dem Pivot irgendwas ergibt was du dir hoffentlich nebenher schon überlegt hast,
je länger du nachdenkst desto genauer kannst du jeden einzelnen Millimeter des Programmablaufs genau vorhersagen
(so mache ich das 😉 )

was spricht dagegen exakt dem tatsächlichen Programmlauf zu folgen und die nicht bedachten Unterschiede festzustellen und dann zu korrigieren,
entweder den Fehler im Code oder die eigene Vorstellung des Vorgangs und daraufhin ganz anderen Code?
 
Zuletzt bearbeitet von einem Moderator:
oder mit einem Debug-Modus deiner IDE... bei Iterationen und Rekursion finde ich das noch einen Ticken hilfreicher, wenn mir die Ausgaben keinen Hinweis auf den Fehler geben. Da kannst du Schritt für Schritt nachvollziehen, was dein Algorithmus macht und welche Werte einzelne Variablen, Arrays, Collections... haben. Es hilft auch, sich ein einfaches Beispiel auszudenken und den Weg des Algorithmus aufzuschreiben, wie er denn richtig funktionieren sollte und dabei den Debugger laufen zu lassen. Wenn sich die Wege irgendwann unterscheiden, siehst du, an welcher Stelle der Fehler auftritt.

Und nein, ich habe auch keine Lust, den Fehler zu suchen 😀
 
hm faszinierend das Ganze:

while(0<0)
dann wird gleich innerhalb der whilschleife das 0 nochmals auf 0 gesetzt.

Und das ist 00 ? (Weiss man heute überhaupt noch auf welcher Türe 00 stand? 😀 )

TO - kannst du mir mit einfachen Worten erklären wie Quicksort funktioniert?
Jede Wette sobald du es mir so erklärt hast, dass ich es verstehe, schaffst du auch die Implementation.
 

Zurück
Oben