더북(TheBook)

부분부분 나누어 살펴보자. linear_search 메서드처럼 binary_searcharraysearch_value를 인수로 받는다.

다음처럼 binary_search 메서드를 호출한다.

p binary_search([3, 17, 75, 80, 202], 22)

메서드는 가장 먼저 search_value가 있을 수 있는 인덱스 범위를 정한다. 다음처럼 하면 된다.

lower_bound = 0
upper_bound = array.length - 1

검색을 시작할 때는 search_value가 전체 배열 어디에든 있을 수 있으므로 lower_bound를 첫 번째 인덱스로, upper_bound를 마지막 인덱스로 정한다.

실제 검색은 while 루프 안에서 수행된다.

while lower_bound <= upper_bound do

이 루프는 search_value를 찾을 수 있는 원소가 남아 있을 때까지 수행된다. 곧 알아보겠지만 알고리즘은 이 범위를 계속해서 좁혀 간다. lower_bound <= upper_bound 절은 언젠가 범위가 남아 있지 않는 상황에 도달하고 이때 search_value가 배열에 없다고 판단할 수 있다.

루프 내 코드는 범위의 midpoint에 있는 값을 확인한다. 다음과 같이 수행한다.

midpoint = (upper_bound + lower_bound) / 2
value_at_midpoint = array[midpoint]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.