Quicksort - Probleme

Mr.GreenTea

Mitglied
Hallo alle zusammen,

wir behandeln zur Zeit die Sortieralgorithmen und sollen den Quicksort implementieren.
Ich muss sagen, ich hab mich anfangs sehr schwer getan, das Prinzip in Code umzusetzen.

Ich hab mir jetzt was zusammengebastelt, was eigentlich funktionieren sollte, allerdings Gerät das ganze an einer sehr merkwürdigen Stelle in eine "Endlosschleife??"

Bin das Programm im Debug-mode durchgegangen und es hört plötzlich auf. ???:L

Java:
package QickSort;

public class run {
	
	private static int[] swap(int[] array,int l,int r)
	{
		int tmp = array[l];
		array[l] = array[r];
		array[r] = tmp;
		
		return array;
	}
	
	private static void Quicksort(int[] array, int l, int r)
	{
		int pivot = array[l]; //Speichere das Pivotelement ab
		int i = l + 1; //Beginne bei einer Position rechts vom Pivotelement
		int j = r;
		
		if(r > l) //Solange das array größer als 1 ist
		{
			while(i <= j) //Bis sich die linke Suche und die rechte Suche treffen
			{
				while(array[i] < pivot); //Suche von links nach einem Element, größer als das Pivotelement
					i++;
				while(array[j] > pivot); //Suche von rechts nach einem Element, kleiner als das Pivotelement. Hier bricht das Programm ab... ohne Fehlermeldung
					j--;
			
				array = swap(array, i , j); //Vertausche die beiden Elemente
			}
			
			array = swap(array, i, l); //Tausche das Pivotelement mit dem Element, kleiner als das Pivotelement, das an rechtester Position sitzt
			
			for(int k = 0; k < array.length; k++)
				System.out.print(array[k] + "\t");
			
			Quicksort(array, l, i - 1); //Starte Quckisort erneut von links bis zur letzten Position vor dem Pivotelement
			Quicksort(array, i + 1, r); //Starte Quicksort erneut von der ersten Position rechts vom Pivotelement bis zur letzten Position
		}
		
		
		
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] array = new int[] {-5, 13, -32, 7, -3, 17, 23, 12, -35, 19};
		
		Quicksort(array, 0, array.length - 1);
		
		
	}

}
 
Zeile 24 und 26 soll das Semilkolon am Ende bestimmt nicht sein.
Was nicht heißt, dass das Programm danach besser funktioniert, aber du hast zumindest keine Endlosschleife mehr...
 
Ok, den Fehler hab ich bei den vielen Verbesserungsarbeiten übersehen. Soweit würde auch alles funktionieren. Nur is jetzt n Logikfehler aufgetaucht, den ich so einfach nicht beheben werden kann.

Ich werd das ganz mal mit einer einseitigen Suche ausprobieren.

Vielen Dank 🙂
 
Ich habe mich mit Quicksort nicht beschäftigt, aber ich würde sagen, in den while-Schleifen in Zeile 24 bis 26 müsste noch ein Abbruch-Kriterium

Java:
i < array.len

sowie

Java:
j >= 0

rein, um eine ArrayIndexOutOfBoundsException zu vermeiden.
 
Ok, den Fehler hab ich bei den vielen Verbesserungsarbeiten übersehen. Soweit würde auch alles funktionieren. Nur is jetzt n Logikfehler aufgetaucht, den ich so einfach nicht beheben werden kann.

Ich werd das ganz mal mit einer einseitigen Suche ausprobieren.

Vielen Dank 🙂

hat sich das Problem jetzt gelöst, weil sonst würde ich dir gerne noch helfen. Hab nämlich selbst eine GFS über das Thema gehalten, und weiß noch, wie ich mich nächtelang mit diesem Algorithmus geschlagen habe, bis ich es endlich 100% kapiert habe. Könnte nämlich meine alten Unterlagen nochmal hervorholen, aber natürlich nur, wenn dir das noch hilft.
 
hat sich das Problem jetzt gelöst, weil sonst würde ich dir gerne noch helfen. Hab nämlich selbst eine GFS über das Thema gehalten, und weiß noch, wie ich mich nächtelang mit diesem Algorithmus geschlagen habe, bis ich es endlich 100% kapiert habe. Könnte nämlich meine alten Unterlagen nochmal hervorholen, aber natürlich nur, wenn dir das noch hilft.

Hat sich erledigt. Mir hat dieses Divide & Conquer etwas zu schaffen gemacht. Deswegen viel mir auch der MergeSort so schwer. Konnte jetzt aber jeden Algorithmus in Ruhe durchgehen und hab alles verstanden.

Danke 🙂
 

Zurück
Oben