[Data Structure & Alogrithm] Binary Search
📝Binary Search (이분탐색)
📌 설명
- 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.
- 탐색 범위를 반씩 줄여가면서 탐색하기 때문에 O(logN) 시간이 걸린다.
📌 알고리즘
- low는 탐색하고자 하는 대상에서 가장 작은 값(왼쪽)을 가리킨다.
-
high는 탐색하고자 하는 대상에서 가장 큰 값(오른쪽)을 가리킨다.
- mid는 탐색하고자 하는 대상의 중간 위치를 가리킨다. (
mid = (low+high) / 2
) - 위 배열에서 14를 찾는다고 하자
- 현재의 mid 값과 찾고자하는 원소의 값 14와 비교한다.
- mid값이 더 크다면, high를 mid - 1로 바꾼다.
- 다시 과정을 반복한다.
- 현재 mid값 5보다 찾고자 하는 14가 더 크다.
- mid값이 더 작다면, low를 mid + 1로 바꾼다.
- 다시 현재 mid 값과 low 값을 비교한다. 찾고자 하는 값 14가 mid 위치에 있으므로 탐색을 종료한다.
-
소스코드는 다음과 같다.
int binarySearch(int num, int low, int high) { while (low <= high) { int mid = (low + high) / 2; if (arr[mid] == num) //arr에 num이 존재한다면, index 반환 return mid; else if (arr[mid] > num) { high = mid - 1; } else if (arr[mid] < num) { low = mid + 1; } } return -1; //arr에 num이 존재하지 않는다면, -1 반환 }