今天做了一道快速排序的模板题,用的是以前的代码:
但是,出现了栈溢出错误,原因是当原数列是有序时,递归次数太多。现改用另一种代码思路:
void qsort(int l, int r) {
int tmp = a[(l+r)/2], i = l, j = r;
while(i <= j) {
while(a[j]>tmp) j--;
while(a[i]<tmp) i++;
if(i<=j) {
int t = a[i]; a[i] = a[j]; a[j] = t;
i++;
j--;
}
}
if(i<r) qsort(i, r);
if(j>l) qsort(l, j);
}