Quicksort Fehler in der Implementierung

klausr

Mitglied
Ich habe versucht Quicksort zu implementieren, habe aber Fehler in der Implementierung. Es kommen immer ArrayIndexOutOfBounce Exceptions hoch, ich finde aber leider seit über 2 Stunden den Fehler nicht.

Wenn ich i=l setze, also die -1 weg, läuft das Programm zwar ohne Fehler, aber die Lösung ist falsch.

Es wäre sehr nett, wenn mir jemand Input geben könnte.

Danke vorab u. Gruß

Java:
public class T1 {
       
    public static void Quicksort(int [] a, int l, int r) {
        int pivot;
        int i;
        int j;
        int buffer;
        if(r>l) {
            pivot = a[r];
            i = l-1; 
            j = r;
       
            while(j<=i) {
                while(a[i] >= pivot) {
                    i++;
                }
                while(a[j] <= pivot) {
                    j--;
                }
                if(i<j) {
                    buffer = a[j];
                    a[j] = a[i];
                    a[i] = buffer;
                }
            }
            buffer = a[r];
            a[r] = a[i];
            a[i] = buffer;
            Quicksort(a,l,i-1);
            Quicksort(a,i+1,r);
        }

    }
    public static void main(String [] args) {
        int [] a = new int[] {1,5,3,4,2};
        Quicksort(a,0,a.length-1);
       
        for(int i=0; i<a.length; i++) {
            System.out.print(a[i]);
        }

    }
   
   
}
 
Ungetestet, aber i solltest du auf l setzen, statt auf l-1 und die nachfolgende while-Scheife sollte die Bedingung i <= j haben und nicht umgekehrt.

lg Kevin
 
Danke dir für deinen Input. Ich habe es soeben nun hingekriegt
Für meine Nachwelt nun noch der korrekte Code:

Java:
public class Quicksort {
       
    public static void Quicksort(int [] a, int l, int r) {
        int pivot;
        int i;
        int j;
        int buffer;
        if(r>l) {
            pivot = a[r];
            i = l;
            j = r;
       
            while(i<j) {
                while(a[i] < pivot) {
                    i++;
                }
                while(a[j] > pivot) {
                    j--;
                }
                if(i<j) {
                    buffer = a[j];
                    a[j] = a[i];
                    a[i] = buffer;
                }
            }
            buffer = pivot;
            pivot = a[i];
            a[i] = buffer;
            Quicksort(a,l,i-1);
            Quicksort(a,i+1,r);
        }
    }
 

Zurück
Oben