i implemented the Quick Sort Algorithm which given pseudo code in Introduction to Algorithms (Cormen, 3rd Edition) 7.1
When i tried algorithm with small sized arrays, result is true. But when i tried with N=50000 and array is already sorted like this;
N = {1, 2, 3, ..., 50000};
It gives StackOverflowError. I think it's happening because the function recurse itself 50000 times.
QuickSort(A, 0, 49999) => QuickSort(A, 0, 49998) => QuickSort(A, 0, 49997)... so go on.
Can i solve this problem? Or should i use different pivot position?
Here is my code;
public void sort(int[] arr){ QuickSort(arr, 0, arr.length - 1); }
private void QuickSort(int[] A, int left, int right){
if(left < right){
int index = Partition(A, left, right);
QuickSort(A, left, index - 1);
QuickSort(A, index + 1, right);
}
}
private int Partition(int[] A, int left, int right){
int pivot = A[right];
int wall = left-1;
for(int i=left; i<right; i++){
if(A[i] <= pivot){
Swap(A, ++wall, i);
}
}
Swap(A, wall + 1, right);
return wall + 1;
}
private void Swap(int[] A, int x, int y){
int keeper = A[x];
A[x] = A[y];
A[y] = keeper;
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…