2017-07-07 4 views
-1

私は素早い疑問を持っています:両方の断片の複雑さは同じです。しかし、私はどちらが比較的優れているのか、またその理由を知りたいのですか?配列要素と配列インデックスとの効率化

  for (int i = 0; i < n - 1; i++) 
      { 
       for (int j = i + 1; j <= n - 1; j++) 
       { 
        if (a[j] < a[i]) 
        { 
         int temp = a[i]; 
         a[i] = a[j]; 
         a[j] = temp; 
        } 
       } 
      } 

これは私の友人が書いたものです::

これは私が書いたものである:これは、選択ソートのコードである

  for (int i = 0; i < n - 1; i++) 
      { 
       int iMin = i; 
       for (int j = i + 1; j <= n - 1; j++) 
       { 
        if (a[j] < a[i]) 
        { 
         iMin = j; 
        } 
        int temp = a[i]; 
        a[i] = a[iMin]; 
        a[iMin] = temp; 
       } 
      } 
+3

2頭の馬がいて、なぜ速いのかを知りたいのであれば、自分で馬を競ってみませんか?なぜあなたは速いのか教えてくれるのですか? –

+0

これはどちらが速いかではありません。私はまだ彼に尋ねなかったが、ブロック内の要素を直接スワップしないという論理的な説明があるかどうかを理解しようとしている。それは単なる良いプログラミングテクニックですか、それとも効率についてですか? –

+0

実際の違いはあまりないかもしれませんが、最初は明らかに優れています。 –

答えて

1

あなたのコードは、あなたがスワップを作るために速く、わずかである場合にのみ、a[j] < a[i]友人のコードは常にスワップを行っています。したがって、ほとんどの場合、コードのスワップは少なくなります。

両方のコードの複雑さはまったく同じですが、あなたの「定数」は小さくなり、コードはより速くなります。

+1

さて、ありがとうございました。 –

関連する問題