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
tìm kiếm nhị phân sử dụng kết quả khối như một gợi ý mà một phần của mảng (trái hoặc bên phải) nên được lựa chọn để tìm kiếm trên phiên bản kế tiếp. Nếu khối trả về 0 nó sẽ ngừng tìm kiếm. Nếu nó trả ít hơn 0 nó sẽ đi lại nếu không nó đi đúng :)
biết thêm thông tin ở đây http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-bsearch
UPD
Ok, chúng ta hãy lấy một ví dụ của bạn
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 3 }
Đầu tiên chúng ta sẽ lấy phần tử trung gian (2) và mang nó đến khối. 2 == 3
sẽ trả về false
, vì vậy chúng tôi di chuyển sang bên phải của mảng.
Chúng tôi có yếu tố giữa [4, 5]
đó là 5
và 5 == 3
được false
Không có bất kỳ yếu tố ở bên phải, vì vậy chúng tôi sẽ trở lại nil
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 2 }
Đầu tiên 2 == 2
là true
. Chúng tôi đi bên trái.
Phần tử ở giữa [-1, 1]
là 1. 1 == 2
là false
. Chúng tôi đi bên phải.
Không có bất kỳ yếu tố trong [-1, 1]
quyền 1, vì vậy chúng tôi trở lại yếu tố cuối cùng cuối cùng mà trở true
tuyên bố đó là 2
PS: đừng quên, mà mảng nên được sắp xếp;)
Bạn nên giải thích điều gì đã xảy ra * ở chế độ tìm tối thiểu *? Như các ví dụ của OP có liên quan đến điều này. –
@ArupRakshit Tôi mặc dù tác giả đang hỏi về tìm-bất kỳ, phải không? – fl00r
Tôi không nghĩ vậy .. –