actionbrowser.com
Es ist also keine große Überraschung, dass Sie eine beliebige Anzahl zurückerhalten, die Sie in die Methode eingeben. Denken Sie daran, wie die binäre Suche funktionieren soll - wenn der Wert nicht in der Mitte liegt, Rückkehr das Ergebnis der Suche in der linken / rechten Hälfte des Arrays. Also musst du tun etwas mit diesen rekursiven Aufrufen.... Und bei der binären Suche sollten Sie sich wirklich mehr darum kümmern, die zu finden Lage von was auch immer du suchst, nicht von seinem Wert - du weißt das schon! Also was du denken funktionierte die binäre Suche richtig war ein bisschen falsch - auf der Suche nach 1 hätte zurückkehren sollen 0 - der Index / Ort von 1. Außerdem sollten Sie sich nicht mit dem Kopieren von Arrays und dergleichen befassen müssen - dies ist ein Vorgang, der für Suchvorgänge nicht erforderlich ist. Binäre suche java de. Verwenden Sie einfach Parameter, um anzugeben, wo die Suche beginnen / enden soll.
Dies ist viel billiger als das Erstellen einer neuen Liste und das Kopieren von Elementen. Stattdessen verwendet die rekursive Funktion nur das Listenobjekt und ruft sich einfach mit new auf begin, end Werte. Der Rückgabewert ist jetzt der Index der key in der Liste (oder -1 wenn nicht gefunden). 1 für die Antwort № 2 Ihre Rekursion wird nicht ordnungsgemäß beendet. Am Ende der Methode rufen Sie die rekursiv auf bSearch Methode für den linken oder rechten Teil des Arrays. An diesem Punkt müssen Sie das Suchergebnis der rekursiven Aufrufe zurückgeben. Die Idee der binären Suche ist: Wenn Ihr aktueller Knoten nicht der ist key, sehen Sie links, ob der Wert des aktuellen Knotens größer ist als der key oder schauen Sie rechts, wenn es kleiner ist. Nachdem Sie dort gesucht haben, müssen Sie das Suchergebnis von dort zurückgeben. Binäre suche java al. Schauen Sie sich als Nebenbemerkung an raycopy und es ist immer eine gute Idee, Warnungen nicht zu unterdrücken. 1 für die Antwort № 3 ich denken Das Problem ist hier: Sie werfen nur das Ergebnis Ihres rekursiven Aufrufs an bSearch und zurückkehren key.
Ansonsten wird die Mitte m des zu durchsuchenden Bereichs bestimmt und anschlieend entweder in der vorderen Hlfte oder in der hinteren Hlfte nach x gesucht, je nach dem, ob x kleiner oder grer als a [ m] ist. Ist weder das eine noch das andere der Fall, so ist x gleich a [ m] und es wird die gefundene Position m zurckgegeben. Die Mitte m zwischen lo und hi lsst sich einfach als Mittelwert ( lo + hi)/2 von lo und hi berechnen, jedoch besteht hier die Gefahr eines Integer-berlaufs, wenn lo + hi grer als 2. 147. 483. Binäre Suche. 647 wird. Daher wird hier die etwas kompliziertere Berechnung lo +( hi - lo)/2 gewhlt. Wenn x mehrfach im Array a vorkommt, wird irgendeine der entsprechenden Indexpositionen zurckgegeben, also nicht unbedingt die erste. Die Klasse BinarySearcher implementiert das Interface Searcher; dort wird die Methode search vorgeschrieben. Binre Suche rekursiv public class BinarySearcher implements Searcher { @Override public int search( int [] a, int x) return binsearch(a, 0,, x);} public int binsearch( int [] a, int lo, int hi, int x) if (lo>hi) return -1; int m=lo+(hi-lo)/2; if (xa[m]) return binsearch(a, m+1, hi, x); return m;}} Binre Suche lsst sich auch iterativ implementieren.