2017-07-07 3 views
-1

Ich habe eine kurze Frage: Ich weiß, dass die Komplexität beider Snippets gleich ist. Aber ich möchte wissen, welcher ist vergleichsweise besser und warum? Dies ist die Auswahl Bankleitzahl:Effizienz beim Austauschen von Array-Elementen im Vergleich zu Array-Indizes

Das ist, was ich schrieb:

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

Dies ist, was mein Freund schrieb:

  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

Wenn Sie zwei Pferde haben und wissen wollen, warum einer schneller ist, warum fahren Sie die Pferde nicht selbst? Warum fragst du uns, was schneller ist? –

+0

Hier geht es nicht darum, was schneller ist. Ich habe ihn noch nicht gefragt, aber ich versuche nur zu verstehen, ob es eine logische Erklärung dafür gibt, Elemente nicht direkt innerhalb des Blocks auszutauschen. Ist es nur eine gute Programmiertechnik oder geht es um Effizienz? –

+0

Es mag nicht wirklich viel Unterschied machen, aber das erste ist eindeutig besser. –

Antwort

1

Ihr Code ist etwas schneller, weil Sie Swaps machen nur, wenn a[j] < a[i] , während der Code deines Freundes immer einen Tausch macht. In den meisten Fällen wird Ihr Code daher weniger Swaps enthalten.

Die Komplexität beider Codes ist in der Tat die gleiche, aber Ihre "Konstanten" sind kleiner, so dass Ihr Code schneller ist.

+1

Okay, danke. –

Verwandte Themen