Heim > Backend-Entwicklung > C++ > Hauptteil

Wie implementiert man einen binären Suchalgorithmus in C, der die Position des Elements zurückgibt?

DDD
Freigeben: 2024-10-24 03:49:31
Original
946 Leute haben es durchsucht

How to Implement a Binary Search Algorithm in C   That Returns the Element's Location?

Erhalten eines „nützlichen“ C-Binärsuchalgorithmus

Die C-STL stellt einen Binärsuchalgorithmus bereit, gibt aber nur einen booleschen Wert zurück, der angibt, ob der Element existiert. Für Fälle, in denen die genaue Position des Elements erforderlich ist, besteht Bedarf an einem umfassenderen Algorithmus.

Eine Möglichkeit besteht darin, eine benutzerdefinierte binäre Suchfunktion zu erstellen. Hier ist eine einfache Implementierung:

<code class="cpp">template<class Iter, class T>
Iter binary_find(Iter begin, Iter end, T val) {
    // Find the lower bound in at most log(last - first) + 1 comparisons
    Iter i = std::lower_bound(begin, end, val);

    if (i != end && !(val < *i))
        return i; // found
    else
        return end; // not found
}</code>
Nach dem Login kopieren

Ein anderer Ansatz ist die Verwendung eines std::set, das Elemente automatisch ordnet und eine find(T-Taste)-Methode bereitstellt, die einen Iterator für das Element zurückgibt. Dies ist jedoch möglicherweise nicht geeignet, wenn die Daten doppelte Werte enthalten können.

In Situationen, in denen es auf Geschwindigkeit ankommt, ist es wichtig, die Vorteile einer binären Suche zu nutzen. Die Algorithmen „Lower_bound“ und „upper_bound“ können unzureichend sein, wenn das Element nicht vorhanden ist, da sie möglicherweise nicht den Enditerator zurückgeben. Die oben bereitgestellte Funktion „binary_find“ behebt dieses Problem und stellt das korrekte Verhalten sicher.

Das obige ist der detaillierte Inhalt vonWie implementiert man einen binären Suchalgorithmus in C, der die Position des Elements zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage