65,210
社区成员
发帖
与我相关
我的任务
分享
经典的快速排序算法是:
QuickSort(A,p,r)
if p <r
then q <-Partition(A,p,r)
QuickSort(A,p,q)
QuickSort(A,q+1,r)//只要此时q+1 >=r 那么这个调用都是无意义。而q+1>=r的情况出 现岂止一次!.
模拟尾递归
QuickSort(A,p,r)
while p <r
do q <-Partition(A,p,r)
QuickSort(A,p,q)
p <-q+1 //这里就没有无意义的函数调用开销。
void quicksort(int l, int u)
{
int i, m;
if (l >= u) return;
swap(l, randint(l, u));
m = l;
for (i = l+1; i <= u; i++)
if (x[i] < x[l])
swap(++m, i);
swap(l, m);
quicksort(l, m-1);
quicksort(m+1, u);
}