arr_in = [-1, 1,2,4,5]
arr_in.bsearch{ |x| 2 - x }
#=> 2
arr_in.bsearch{ |x| -1 - x }
#=> -1
arr_in.bsearch{ |x| 3 - x }
#=> nil
Binäre Suchergebnis verwendet Blockade als Hinweis, die einen Teil des Arrays (links oder rechts) sollte für die Suche auf der nächsten Iteration gewählt werden. Wenn Block 0 zurückgibt, wird die Suche beendet. Wenn es gibt weniger als 0 wird es sonst gehen Sie nach links geht es rechts :)
Weitere Informationen hier http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-bsearch
UPD
Ok, lassen Sie uns Ihr Beispiel
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 3 }
Erste Wir nehmen das mittlere Element (2) und geben es dem Block. 2 == 3
wird false
zurückgeben, so dass wir auf die rechte Seite des Arrays gehen.
Wir nehmen mittlere Element von [4, 5]
die 5
und 5 == 3
ist false
gibt es keine keine Elemente auf der rechten Seite, so werden wir nil
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 2 }
Erste 2 == 2
true
zurückzukehren. Wir gehen nach links.
Mittleres Element von [-1, 1]
ist 1. 1 == 2
ist false
. Wir gehen nach rechts.
Es gibt keine alle Elemente in [-1, 1]
Recht auf 1, so dass wir zurückkehren letztes letztes Element, die true
Anweisung zurückgegeben, die 2
PS: vergessen Sie nicht, dass das Array sortiert werden soll;)
Sie sollten erklären, was passiert * im Find-Minimum-Modus *? Die Beispiele von OP beziehen sich darauf. –
@ArupRakshit Ich, obwohl Autor fragt nach-alle, nicht wahr? – fl00r
Ich glaube nicht .. –