Miffel schrieb:
> Ich versuche hier gerade eine einfache binäre Suche (in C#) zu
> implementieren. Leider will es nicht funktionieren...
Sowas gibt es zwar sicherlich schon auch fertig, aber es ist löblich das
du Basisalgorithmen lernen willst.
> Leider bekomme ich ich ständig falsche Werte. Ich vermute mal dass das
> daran liegt, dass die Anzahl der Messwerte nicht immer eine 2er Potenz
> ist?
> Oder mache ich generell etwas falsch?
Binäre Suche sieht so einfach aus, ist es aber nicht. Das Problem
besteht darin, dass bei einer ungeraden Anzahl Elemente im Suchraum, man
höllisch aufpassen muss, wo die Hälfte liegt und dass man dann das
Intervall richtig neu aufteilt.
Du musst lernen dir selbst zu helfen und zu debuggen.
Und ein Weg und bei weitem nicht der schlechteste, ist es, sich an
strategischen Stellen strategisch wichtige Variablen ausgeben zu lassen.
In C# steht dir ohnehin ein ausgezeichneter Weg über das Developer
Studio und dessen Output-Fenster zur Verfügung, in das man leicht Werte
ausgeben kann.
http://support.microsoft.com/kb/815788
Also lass dir hier jeweils beim Durchgang durch den Anfang der
Suchschleife die Variablen ausgeben
1 | while (searchStep > 0)
|
2 | {
|
3 |
|
4 | >>>> hier ist interessant: welche Werte haben searchPos und searchStep
|
Und dann wird dieser Mitschrieb studiert und daraus Schlüsse gezogen
> Oder mache ich generell etwas falsch?
IMHO ja.
Beim Binären suchen hat man ein Intervall, das man durch Startindex und
Endindex definiert und nicht durch Startindex und Größe. Wird nämlich
ein Intervall in 2 aufgeteilt und entschieden in welchem davon
weitergesucht werden muss, dann hat dieses neue Intervall nicht
unbedingt eine neue Größe von step / 2