2.3.1 코드 구현: 이진 검색

    다음은 루비로 구현한 이진 검색이다.

    def binary_search(array, search_value)
        
        # 먼저 찾으려는 값이 있을 수 있는 상한선과 하한선을 정한다.
        # 최초의 상한선은 배열의 첫 번째 값, 하한선은 마지막 값이다.
    
        lower_bound = 0
        upper_bound = array.length - 1
        
        # 상한선과 하한선 사이의 가운데 값을 계속해서 확인하는 루프를 시작한다.
    
        while lower_bound <= upper_bound do
            
            # 상한선과 하한선 사이에 중간 지점을 찾는다.
            # (결괏값이 정수가 아닐까 봐 걱정할 필요 없다.
            # 루비는 정수를 나누기할 때 결괏값을 가장 가까운 정수로 올림한다.)
    
            midpoint = (upper_bound + lower_bound) / 2
            
            # 중간 지점의 값을 확인한다.
    
            value_at_midpoint = array[midpoint]
            
            # 중간 지점의 값이 찾고 있던 값이면 검색을 끝낸다.
            # 그렇지 않으면 더 클지 작을지 추측한 바에 따라 상한선이나 하한선을 바꾼다.
    
            if search_value == value_at_midpoint
                return midpoint
            elsif search_value < value_at_midpoint
                upper_bound = midpoint - 1
            elsif search_value > value_at_midpoint
                lower_bound = midpoint + 1
            end
        end
        
        # 상한선과 하한선이 같아질 때까지 경곗값을 줄였다면
        # 찾고 있는 값이 이 배열에 없다는 의미다.
    
        return nil
    end
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.