Jon Bentley が彼の「美しいクイックソート コード」を紹介しているhttp://code.google.com/edu/algorithms/index.htmlのビデオを見るまでは、クイックソートの仕組みをよく理解していると思っていました。 :
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 に置き換えます。それは注文を台無しにします。
何か不足していますか?
ありがとう。