Ohne zu wissen, was sind Ihre Testfälle, es auf der Anzahl der Vergleiche zu kommentieren ist nicht möglich, sie auszuführen. Wenn alle Fälle ähnliche Attribute haben, ist es durchaus möglich, dass sich der Code so verhält, wie er sollte.
EDIT: das folgende als Reaktion auf die Behauptung von OP in Kommentaren hinzugefügt, dass die Testfälle Vektoren mit 100 zufällig erzeugten zweistelligen Elementen sind.
Wenn, wie Sie in Kommentaren gesagt haben, Ihre Testfälle Vektoren mit 100 zufälligen zweistelligen Werten enthalten, dann hängt der Wert von counter
davon ab, wie "unsortiert" die Elemente sind (mit dem minimal möglichen Wert für die Anzahl der Elemente). Unter der Annahme, dass alle Ihre Testfälle die gleiche Größe haben, ist der einzige Wert, der counter
gleich ist, dass die Vektoren ähnlich sortiert sind, BEVOR Sie Ihre Funktion aufrufen. Wenn beispielsweise alle Vektoren in aufsteigender Reihenfolge und mit derselben Größe vorsortiert sind, gibt jeder Testfall den exakt gleichen Rückgabewert zurück. Wenn alle Vektoren in absteigender Reihenfolge und mit derselben Größe vorsortiert sind, gibt jeder Testfall genau denselben Rückgabewert (wenn auch anders als der zurückgegebene Wert, wenn sie anfänglich in aufsteigender Reihenfolge vorliegen).
Aus diesem Grund glaube ich nicht Ihren Kommentar, dass die Testfälle zufällig sind. Sie sind wahrscheinlich in irgendeiner Weise vorsortiert (oder vielleicht teilweise sortiert). Zum Beispiel könnten Sie Ihre Funktion für jeden Testfall zweimal aufrufen und nur den Wert count
nach dem zweiten Aufruf ausgeben, wenn der Vektor bereits vorsortiert ist (wenn sich Ihr Code so verhält, wie er sollte).
Ende bearbeitet
, dass die Variable counter
in Ihrem Code sagte, wird die Anzahl der Male der Körper der while
Schleife ausgeführt wird akkumulieren. Das hat nichts mit der Anzahl der durchgeführten Vergleiche zu tun, da im Rumpf dieser Schleife kein Vergleich durchgeführt wird. Es bezieht sich auf die Anzahl der Einfügungen, nicht auf die Anzahl der Vergleiche.
Wenn durch „Vergleich“, meinen Sie wollen temp < v[j]
Auswertung des Ausdrucks (im Unterschied zu anderen Ausdrücken, wie i < v.size()
oder j >= 0
, die auch Vergleiche im Code genannt werden könnte), dann könnte man etwas betrachten wie
tun
while (++counter && temp < v[j] && j >= 0)
und Entfernen der Inkrementierung von counter
aus dem Schleifenkörper.
Da counter
auf Null initialisiert wird, zählt dies die Anzahl der Messungen temp < v[j]
wird ausgewertet (++counter
wird immer ein Ergebnis ungleich Null ergeben). Beachten Sie, dass, da temp < v[j]
falsch sein kann, die Anzahl der Berechnungen j >= 0
nicht gezählt wird.
Ich denke, der Fehler ist woanders, das sollte funktionieren. – alain
Welche Art von Fehler? @alain – Lightypulse
Wie fülle ich den Eingabevektor mit Werten? Setzt du den Zufallsgenerator richtig ein? –