整数に2を掛けると、コンパイラは自動的にそれを右シフト演算に変換します(これは非常に効率的です)。また、整数を比較するよりも浮動小数点数を比較する方がコストがかかります。4行目が実行される回数は3行目が実行される回数と同じであるため、4行目が総コストを最もよく表します。
コードの総コスト
= total cost of comparing i with n and incrementing i +
total cost of comparing j with n and right shifting j +
total cost of comparing two floats +
total cost of incrementing a float
<= c1*n + c2*n*n/2 + c3*n*n/2 + c4\sum_{1 <= i <= n, 1 <= k <= n/2}d(i,2k),
where d(i, j) is 1 if array[i] > array[j] and 0 otherwise.
<= c1*n + c2*n^2 + c3n^2 + c4n^2
<= c*n^2 for some constant c