ビューティフルコードを読み進める その3

ビューティフルコード (THEORY/IN/PRACTICE)

ビューティフルコード (THEORY/IN/PRACTICE)

さてさて、読み進めているビューティフルコード。昨日、ちょっと中途半端なところで止まった理由は次のコードが分からなかったから。例3-4のコードを今の僕のコードに反映させるとこんな感じかな。

void quicksort(int l,int u){
  int i,m,tmp;
  if( l >= u ){
    return;
  }
  // tmp = randint(l,u);
  //  swap2(l,tmp);
  // m = l;
  m = randint(l,u);
  comps += u-l;
  // for( i = l+1 ; i <= u ; i++ ){
  //   if(list[i] < list[l]){
  //     ++m;
  //     swap2(m,i);
  //   }
  // }
  // swap2(l,m);
  quicksort(l,m-1);
  quicksort(m+1,u);
}

ここでは並び替えって作業を除去するだけかなぁと思っていたので、swap2関数をコメント化すればよいと思っていたのだが、本を読むと違う。本をよんでよく分からないのは、randintの戻り値をmで受けるってことと、forループの中でのmのインクリメントがコメントアウト化されていたこと。randintの戻り値を受け取っていたのは再起呼び出しでquicksort関数を呼ぶ出すために回数カウントには必要だろうと納得できたのだけど、for文のmに対する演算をコメント化する理由がよくわからない。( ̄Д ̄;;

実際に動かしてみたんだけど、例3-3では154991回って出たcompsの値が今回の例は162242ってなったので、あれれって感じ。まぁ、取り急ぎさくさく前に進もう。