Arrays in C - Binäre Suche
Erinnern Sie sich das Spiel „Ich denke, eine Nummer“ zu spielen. wo die Antworten auf die Aussage „ich von einer Zahl zwischen 1 und 100 denken“ sind „zu hoch“, „zu niedrig“ oder „You Got It!“? Eine Strategie, die oft verwendet wird, wenn dieses Spiel zu spielen ist die Intervalle zwischen der Vermutung und dem Enden des Bereichs in zwei Hälften zu teilen. Diese Strategie hilft Ihnen, schnell auf die gewünschte Anzahl zu verengen um.
Wenn ein Array suchen, verwendet der binäre Suchprozess das gleiche Konzept der Teilungsintervalle in Hälfte als Mittel, den „Schlüssel“ Wert so schnell wie möglich zu finden.
Wenn Ihr Array in Ordnung (aufsteigend oder absteigend) ist, können Sie für die gewünschte „Schlüssel“ Element suchen schnell durch einen binären Suchalgorithmus verwendet (bezeichnet als „Teile und Herrsche“ -Ansatz).
Betrachten Sie das folgende Array von ganzen Zahlen:
Array von ganzen Zahlen, mit dem Namen num. in „aufsteigend“ angeordnet.
Wir werden für die Schlüsselnummer werden die Suche 64. Hier ist, wie die binäre Suche funktioniert:
Zuerst wird die Mitte des Arrays durch Hinzufügen des Array-Index von dem ersten Wert auf den Index des letzten Wertes und Dividieren durch zwei: (0 + 9) / 2 = 4 Integer Division verwendet bei der 4. Subskript ankommen wird, als die Mitte. (Die tatsächliche mathematische Mitte zwischen den Indices 4 und 5 sein würde, aber wir müssen mit ganzzahligen Indizes arbeiten.)Subscript 5 hält die Nummer 55, die vor 64 kommt, so dass wir jetzt wieder unterteilen
(6 + 6) / 2 = 6 und Element 6 halten die Nummer 64.
// Funktionsaufruf an die binären Suchfunktion (siehe unten)
// für das Array oben gezeigten
binarysearch (num, 0, 9, 64);
// Binary Suchfunktion
/ Funktion akzeptiert ein Array, die untere Grenze und die obere Grenze Subskripte.
// gesucht werden, und die Schlüsselnummer für die wir suchen.
// Es gibt wieder nichts.
Leere binarysearch (apvector
int position;
int comparisonCount = 1; // die Anzahl der Vergleiche (optional) zählen
// Um zu beginnen, den Index der mittleren Position zu finden.
Position = (UntereGrenze + Oberegrenze) / 2;