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
İkili arama sonraki yineleme arama için seçilmelidir dizinin (sol veya sağ tarafına) bir parçasıdır bir ipucu olarak bloğun sonucunu kullanır. Blok 0 değerini döndürürse, aramayı durdurur. o sola git edecektir 0 daha az dönerse, aksi takdirde doğru gider :)
burada
fazla bilgi http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-bsearch
Tamam UPD, senin örnek
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 3 }
İlk alalım orta elemanı (2) alıp bloğa vereceğiz. 2 == 3
, false
'u döndürecek, bu nedenle dizinin sağ tarafına doğru hareket ediyoruz.
Biz 5
olduğunu [4, 5]
ve 5 == 3
orta elemanı false
sağda Hiçbir unsurlar yoktur edilir almak, bu yüzden nil
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 2 }
İlk 2 == 2
true
olduğunu dönecektir. Sola gideriz. [-1, 1]
'un orta elemanı 1 1 == 2
ise false
şeklindedir. Biz sağa gideriz.
Orada sağ 1'e [-1, 1]
hiçbir herhangi unsurlar, bu yüzden 2
PS olduğunu true
deyimi döndürülen son son öğe dönmek: dizi sıralanması gerektiğini, unutmayın;)
Bulma minimum modunda * ne olduğunu açıklamalısınız *? OP'nin örnekleri bununla ilgilidir. –
@ArupRakshit Her ne kadar yazar onu bulmak hakkında soru sorsa da öyle değil mi? Bu yazı işlerinde ben öyle düşünmüyorum – fl00r
.. –