HightronicDesign
HightronicDesign

Reputation: 709

Quicksort in Java (Stackoverflow)

I am trying to write an quicksort algorithm in Java and I am getting some problems when I try to run it.

public static <T extends ICompare<T>> void quicksort(T[] a, int start, int end) {
    start = 0;
    end = a.length - 1;
    int i = start;
    int k = end;

    if (end - start >= 1) {
        T pivot = a[start];

        while (k > i) {
            while (a[i].lesserEqual(pivot) && i <= end && k > i) {
                i++;
            }
            while (a[k].greaterEqual(pivot) && k >= start && k >= i) {
                k--;
            }
            if (k > i) {
                swap(a, i, k);
            }
        }
        swap(a, start, k);
        quicksort(a, start, k - 1);
        quicksort(a, k + 1, end);
    } else {
        return;
    }
}

And when i try to run it the console says something about a Stackoverflow :

Exception in thread "main" java.lang.StackOverflowError
at tests.Data.getValue(Data.java:14)
at tests.Data.lesserEqual(Data.java:31)
at tests.Data.lesserEqual(Data.java:1)
at algo.Sort.quicksort(Sort.java:29)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)
at algo.Sort.quicksort(Sort.java:44)

I am really sure that i have done something wrong with one of the while loops there, but i cannot see what it is ?

Thanks for help

Upvotes: 2

Views: 367

Answers (1)

libik
libik

Reputation: 23029

At the beggining you are doing this :

start = 0;
end = a.length - 1;

Each time you call your method, you rewrite its values pass by parameters with this, therefore your quicksort never ends. And because it never ends, it is called recursivelly again and again and after some time, the stack which holds information about what method called another is overflowed and you get exception.

Upvotes: 2

Related Questions