자료를 반으로 나누어 가면서 탐색해 값을 찾는 방법

int BinarySearch(int start, int end, int key) {
  if (start <= end) {
    int mid = start + (end - start) / 2;
    if (key == arr[mid]) return key;
    if (key < arr[mid]) return BinarySearch(start, mid - 1, key);
    if (key > arr[mid]) return BinarySearch(mid + 1, end, key);
  }
  return -1;
}

탐색 순서

idx 0 1 2 3 4
value 10 20 54 40 12
idx 0 1 2 3 4
value 10 12 20 40 54
idx 0 1 2 3 4
value 10 12 20 40 54
idx 0 1 2 3 4
value 10 12 20 40 54
idx 0 1 2 3 4
value 10 12 20 40 54

와 같은 순서로 탐색한다. 20을 찾기 위해선 1번, 12와 40을 찾기 위해선 2번, 10과 54를 찾기 위해선 3번의 탐색이 필요하기 때문에 O(logN)번 만에 찾을 수 있다.