2017-07-07 4 views
-1

J'ai une brève question: Je sais que la complexité des deux extraits est la même. Pourtant, je veux savoir lequel est relativement meilleur et pourquoi? Voici le code de tri de sélection:Efficacité de l'échange d'éléments de tableau par rapport aux indices de tableau

C'est ce que je l'ai écrit:

  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; 
        } 
       } 
      } 

C'est ce que mon ami a écrit:

  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

Si vous avez deux chevaux et que vous voulez savoir pourquoi on est plus rapide, pourquoi ne courez-vous pas vous-même les chevaux? Pourquoi nous demandez-vous de vous dire lequel est le plus rapide? –

+0

Il ne s'agit pas de savoir qui est le plus rapide. Je ne lui ai pas encore demandé, mais j'essaie simplement de comprendre s'il y a une explication logique à ne pas échanger des éléments directement dans le bloc. Est-ce juste une bonne technique de programmation ou est-ce une question d'efficacité? –

+0

Il peut ne pas faire beaucoup de différence réelle, mais le premier est nettement meilleur. –

Répondre

1

Votre code est légèrement plus rapide parce que vous faites des swaps seulement quand a[j] < a[i] , alors que le code de votre ami fait toujours un échange. Ainsi, dans la plupart des cas, votre code fera moins d'échanges.

La complexité des deux codes est en effet la même, mais vos "constantes" sont plus petites, donc votre code est plus rapide.

+1

D'accord, merci. –