Binärsuche
-
Kannst du den aktuellen Code posten mit allen relevanten Variablenwerten, die du im Debugger gesehen hast und den Werten, die du erwartest? Ich kann dein Problem sonst nicht nachvollziehen.
Du debuggst schon im Debug-Modus, oder?
-
reichst du den rückgabewert auch weiter? in deinem beispiel hast du
die funktion nur aufgerufen, und den rückgabewert ignoriert.versuch mal
[cpp]
if(arr[iMitte] < srch)
return binsearch(arr,iMitte,iEnd,srch);
else
return binsearch(arr,iBegin, iMitte,srch);
[cpp]
-
Hallo,
das mit der Weitergabe ist wohl ein Fehler. Nun wird "true" ausgeben, doch wenn ich nach einem nichtvorhandenen Element suche, kommt es zum StackOverFlow. Liegt das an der abbruchbedingung. Ich habe die zuelse if(iMitte<0) return false;geändert, doch das bringt auch nichts.
vielen Dank für die Hilfe
lg, freakC++
-
Die Binäre Suche ist viel zu fallenreich, um sie durch Versuch und Irrtum zu lösen, fürchte ich.
-
else if(iMitte==0||iMitte==iEnd-1)
-
Trotzdem würde ich mein Problem gerne lösen. Ich bin einen kleinen Schritt weiter, nämlich, dass iMitte ja auch hier größer werden kann.
Irgendwie muss die Abbruchbedingung geändert werden, doch ich komm einfach nicht auf die richtige Lösung.
Vielen Dank für die Hilfe
lg, freakC++
-
Ha, es funktioniert. Das ist die richtige Abbruchbedingung. DAAnke! Super! Ich wusste, dass es irgendwie daran liegen muss.
Noch eine letzte Frage: warum heißt das eigentlich "Binäre Suche"? Weil das Array aufgeteilt wird?? Hier ist doch nichts binär!
Vielen Dank, ghlo (und natürlich auch alle anderen)
lg, freakC++
-
freakC++ schrieb:
Noch eine letzte Frage: warum heißt das eigentlich "Binäre Suche"? Weil das Array aufgeteilt wird?? Hier ist doch nichts binär!
Das Array wird rekursiv in zwei Teile aufgeteilt, deshalb binär. Der Begriff "binär" hat nicht nur mit Zahlensystemen zu tun.
-
-
Achso, dann war das bei mir ein Missverständis. Das ist jedoch jetzt behoben!
Danke
lg, freakC++