2016-04-19 5 views
0

Ich bin verwirrt, wenn diese Vergleichszahlen so groß in Wert für einen Vektor mit 100 zufälligen zweistelligen Zahlen sein sollen. Volles Programm -> sicherer Link: https://ideone.com/oybDbD Die Programmausgabe befindet sich auf der unteren Seite des Links. Wertschätze schätzen.Einfügevergleich #s scheinen zu groß

int insertionSort (vector<int> &v) { 
    int j, temp, counter = 0; 

    for (int i = 1; i < v.size(); i++) { 
     j = i; 

     while (++counter && j > 0 && v[j] < v[j-1]){ 
      temp = v[j]; 
      v[j] = v[j-1]; 
      v[j-1] = temp; 
      j--; 
     } 
    } 
    return counter; 
} 

Antwort

1

Die durchschnittliche Leistung des Falles Insertionsort IS O(N^2) (die wiki entry sehen). Für Ihren Vektor aus 100 Elementen ist daher die erwartete Anzahl von Vergleichen O(10000). Wenn Sie mit 2656 oder in Ihrem zweiten Lauf mit 4995 auskommen, ist der Vergleich daher niedriger als, was Sie sonst erwarten würden.

+0

Nur um zu klären, ist die erwartete Anzahl von Vergleichen für Insertion sort 10, 000? Danke für Ihre Hilfe :) – Lightypulse

+0

@Lightypulse: Nicht ganz. Die durchschnittliche Anzahl der Vergleiche ist "O (N^2)", was in diesem Fall zu "O (10000)" führt. Erwartungswerte kommen in Statistiken, was ein anderes Ballspiel ist. Ich entschuldige mich für die Unklarheit dort. Auch [diese Antwort] (https://stackoverflow.com/questions/17055341/why-is-insertion-sort-%CE%98n2-in-the-average-case) kann Ihnen helfen, besser zu verstehen, was vor sich geht. – Richard

+0

@Lightypulse: Wenn meine Antwort hilfreich für Sie gewesen ist, zögern Sie nicht, zu upvote oder akzeptieren Sie es, indem Sie auf die Pfeile oder Häkchen klicken. – Richard