0

選択ソートを実装するために、コード フラグメント内のコメントを通じて以下にマークされたステートメントの役割は何ですか?

int temp, min;

for (i = 0; i <= count - 2; i++) {
    min = i;
    for (int j = i + 1;  j <= count - 1; j++) {
        if (arr[min] > arr[j]) {
            if (arr[i] == arr[min]) {    //What's the significance of this statement?
                temp = arr[min];
                arr[min] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

その発言の意味は?この if 条件が実際に問題になる入力はありますか?

4

3 に答える 3

3

外側のループでmin=iを定義したので、条件は常に満たされます。したがって、条件を削除することでコードを最適化できます。

選択ソートでは、さらに最適化することもできます。新しい最小値が見つかるたびに値を交換する代わりに、真の最小値の位置、たとえばa [pos]を見つけて、それをa[i]と交換することができます。

于 2012-07-21T21:56:46.303 に答える
2

min = i;j ループの直前に定義しており、ループ内で i と min の値に変化はありません。したがって、どのような場合でも、arr[min] は常に arr[i] と等しくなり、if condition を評価します。常に真であるため、これらの行の役割はありません。条件を削除すると、コードが高速になります (コンパイラがコードを最適化していない場合)。

于 2012-07-21T14:27:15.407 に答える
0
  • 変数 i は 0 から count-1 になります

  • i の各ループで、i から count-1 までの最小値 arr[i] の位置に取得する必要があります。a[i] の最小値を取得するには、次のようにします。

  • min を i の位置に設定する

  • i+1 から count-1 まで変数 j でループする

  • a[j] が a[min] より小さい場合、a[min] と a[j] をスイープします。

そうすることで、各ループ j の最後で、a[i] の最小値が得られます。

于 2012-07-21T22:14:33.487 に答える