【发布时间】:2015-10-31 14:18:43
【问题描述】:
我实现了快速排序算法,它在算法简介(Cormen,第 3 版)7.1 中给出了伪代码
当我尝试使用小型数组的算法时,结果为真。但是当我尝试使用 N=50000 并且数组已经像这样排序时; N = {1, 2, 3, ..., 50000};
它给出了 StackOverflowError。我认为它正在发生,因为函数自身递归了 50000 次。 QuickSort(A, 0, 49999) => QuickSort(A, 0, 49998) => QuickSort(A, 0, 49997)... 继续。
我能解决这个问题吗?还是应该使用不同的枢轴位置?
这是我的代码;
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;
}
【问题讨论】:
标签: algorithm stack-overflow quicksort