二分搜索 (Binary search)

问题

在有序序列 [min, max] 中搜索 key 值

思路

取 mid = (min + max) / 2
key 等于 [mid], 找到最终解
key 大于 [mid], 那么原问题变为:在有序序列 [mid+1, max] 中搜索 key 值
key 不大于 [mid], 那么原问题变为:在有序序列 [min, mid-1] 中搜索 key 值

代码

(define (binary-search vec key min max)
  (if (> min max)
      -1
      (let ((mid (quotient (+ min max) 2)))
        (if (= key (vector-ref vec mid))
            mid
            (if (> key (vector-ref vec mid))
                (binary-search vec key (+ mid 1) max)
                (binary-search vec key min (- mid 1)))))))