我以为我对快速排序的工作原理有很好的了解,直到我在http://code.google.com/edu/algorithms/index.html上观看了 Jon Bentley 介绍他的“漂亮的快速排序代码”的视频,如下所示:
void quicksort(int l, int u){
int i, m;
if(l >= u) return;
m = l;
for(i = l+1; i<= u; i++)
if(x[i] < x[l])
swap(++m, i); //this is where I'm lost. Why the heck does it preincrement?
swap(l, m);
quicksort(l, m-1);
quicksort(m+1, u);
}
令我困惑的算法的另一部分是 FOR 循环之后的最终交换。为什么这是必要的?让我们假设数组已经有序。如果这是真的,那么由于 x[i] > x[l] 就不会发生交换。最后,我们将 l 与 m 交换。这搞砸了订单。
我错过了什么吗?
谢谢。