Quicksort Algorithmus

skuki

Aktives Mitglied
Hallo,

ich möchte einen Quicksort Algorithmus schreiben und diesen dann in weiterer Folge auch mit der median-of-three Methode verbessern.

Aber beim implementieren des normalen Quicksort Algorithmus habe ich schon irgendwo einen Fehler... Ich hoffe ein geschultes Auge erkennt sofort was ich verbockt habe. Ich komme leider selbst nicht drauf 🙁
Vielen Dank!

Code:
package algodat;

public class Sort {

static boolean less(int v, int w){
	return v<w;
}

static void exch(int[] a, int i , int j){
	int t = a[i];
	a[i] = a[j];
	a[j] = t;
}

static void compExch(int[] a, int i , int j){
	if(less(a[j], a[i])){
		exch(a, i ,j);
	}
}

static void quicksort(int[] a){
	quicksort(a,0,a.length-1);
}

static void quicksort(int[] a, int l, int r){
	int x; 
	int p;
	
	if(l<r){
		x = a[r];
		p = partition(a, l, r, x);
		quicksort(a,l,p-1);
		quicksort(a,p+1,r);
	}
}

static int partition(int[] a, int l, int r, int x){
	int i = l-1;
	int j = r;

       if(i==-1)
          i = 0;
	
	while(i<j){
		while(a[i] < x){
			i = i+1;
		}
		while(j>i || a[j] > x){
			j = j-1;
		}
		
		if(i < j){
			exch(a, i , j);
		}
	}
	
	exch(a,i,r);
	return i;
}


    
    public static void main (String[] args){
    	// (1) define your java int array
    	int[] intArray = new int[] {6,7,8,1,3,5,6};
    	 
    	// (2) print the java int array
    	for (int i=0; i<intArray.length; i++)
    	{
    	  System.out.print(intArray[i]);
    	}
    	System.out.println(" ");
    	System.out.println("Sortiert");
    	
   quicksort(intArray);
    	
   	// (3) print the sorted java int array
   	for (int i=0; i<intArray.length; i++)
    	{
    	  System.out.print(intArray[i]);
    	}
    	
 
    	
    }
}

Fehlermeldung
Exception in thread "main" java.lang.StackOverflowError


Vielen Dank!
 
Einfach aufgrund der Fehlermeldung vermute ich, dass du Felder der Länge 1 oder 0 auch noch versuchst zu sortieren und daher in eine Endlos-Rekursion läufst. Bist du deinen Code mal mit dem Debugger durchgegangen? Wenn nein, dann mach das mal... 🙂
 

Zurück
Oben