Die Implementierung binäre Suche eines Arrays (Artikel), Khan Academy
Angenommen, wir wollen wissen, ob die Zahl 67 eine Primzahl ist. Wenn 67 ist in dem Array, dann # x27; s prime.
Wir möchten auch wissen, wie viele Primzahlen sind kleiner als 67. Wenn wir die Position der Nummer 67 in der Anordnung zu finden, können wir verwenden, um herauszufinden, wie viele kleinere Primzahlen existieren.
Die Position eines Elements in einem Array wird als Index bekannt. Array-Indizes beginnt bei 0 und zählt nach oben. Wenn ein Element mit dem Index 0 ist, dann ist es das erste Element in der Anordnung. Wenn ein Element mit dem Index 3 ist, dann hat es 3 Elemente, die in der Anordnung, bevor es kommen.
Mit Blick auf das Beispiel unten, können wir die Anordnung von Primzahlen lesen von links nach rechts, einem nach dem anderen, bis wir die Zahl 67 (im rosaen Kasten) finden und sehen, dass es bei Array-Index ist 18 die Zahl der Suche durch um wie dieses ist eine lineare Suche.
Sobald wir wissen, dass der Primzahl 67 bei Index 18 ist, können wir erkennen, dass es eine Primzahl ist. Wir können auch erkennen schnell, dass es 18 Elemente, die in dem Array vor 67 kommen, was bedeutet, dass es 18 Primzahlen kleiner als 67.
Pseudo-Code
Hier # x27; s der Pseudocode für binäre Suche, modifizierte für in einem Array sucht. Die Eingänge sind die Anordnung, die wir nennen Array; die Anzahl n der Elemente im Array; und Ziel. die Zahl nach zu werden. Der Ausgang ist der Index in der Anordnung von Ziel.
- Lassen min = 0 und max = n-1.
- Berechnen Sie erraten als der Durchschnitt von max und min. abgerundet (so daß es eine ganze Zahl ist).
- Wenn array [Vermutung] gleich vorbei. dann hör auf. Du hast es gefunden! Rück Vermutung.
- Wenn die Vermutung zu niedrig war, das heißt, array [Vermutung] < target. then set min = guess + 1 .
- Ansonsten war die Vermutung zu hoch. Stellen Sie max = Vermutung - 1.
- Gehen Sie zurück zu Schritt 2.
Die Umsetzung Pseudo-Code
Es # x27; s auch ein wichtiger Schritt in diesem Pseudo-Code fehlt, die # x27 didn; t für das Ratespiel Rolle, aber nicht egal, für die binäre Suche eines Arrays. Was soll passieren, wenn die Zahl, die Sie suchen nicht im Array ist? Lassen # x27; s Start von herauszufinden, was Index der binarysearch Funktion in diesem Fall zurückkehren. Es sollte eine Zahl sein, die keine juristische Index in das Array sein kann. Wir # x27; ll verwenden -1. denn das kann kein Recht Index in jeden Array sein. (Eigentlich jede negative Zahl tun würde.)
Die Zielnummer isn # x27; t in der Anordnung, wenn es keine möglichen Vermutungen übrig sind. In unserem Beispiel wird angenommen, dass wir # x27; re die Suche nach der Zielnummer 10 in dem Primzahlen-Array. Wenn es dort ist, 10 würde zwischen den Werten 7 und 11 sein, die an Indizes 3 und 4. Wenn Sie die Indexwerte für min und max verfolgen, wie die binarysearch Funktion ausführt, würden Sie feststellen, dass sie schließlich auf den Punkt wobei min gleich 3 und max gleich 4. Die Vermutung ist, dann Index 3 (da (3 + 4) / 2 gleich 3,5, und wir abrunden) und Primzahlen [3] ist kleiner als 10, so dass min wird 4. Mit beide min und max 4 gleich, muss die Vermutung Index 4 und Primzahlen [4] ist größer als 10 ist nun max wird 3. Was bedeutet es für min 4 bis gleich und max 3 gleich? Es bedeutet, dass die einzig möglichen Vermutungen sind mindestens 4 und höchstens 3. Es gibt keine solche Zahlen! An dieser Stelle können wir schließen, dass die Zielnummer, 10, ist nicht in den Primzahlen-Array und die binarysearch Funktion würde -1 zurück. In der Regel wird einmal max streng weniger als min. wir wissen, dass die Zielnummer nicht im sortierten Array ist. Hier modifizierte Pseudo-Code für binäre Suche, das den Fall behandelt, in dem die Zielnummer nicht vorhanden ist:
- Lassen min = 0 und max = n-1.
- wenn max < min. then stop: target is not present in array. Return -1 .
- Berechnen Sie erraten als der Durchschnitt von max und min. abgerundet (so daß es eine ganze Zahl ist).
- Wenn array [Vermutung] gleich vorbei. dann hör auf. Du hast es gefunden! Rück Vermutung.
- Wenn die Vermutung zu niedrig war, das heißt, array [Vermutung] < target. then set min = guess + 1 .
- Ansonsten war die Vermutung zu hoch. Stellen Sie max = Vermutung - 1.
- Gehen Sie zurück zu Schritt 2.
Nun, da wir # x27; ve dachte durch die Pseudo-Code zusammen, Sie # x27; re versuchen werde, sich binäre Suche zu implementieren. Es # x27; s in Ordnung an dem Pseudo-Code zurück zu blicken - in der Tat, es # x27; s eine gute Sache, weil dann Sie # x27; ll ein besseres Verständnis von dem, was es bedeutet, Pseudo-Code in ein Programm zu konvertieren.