Reputation: 709
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
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