이 글은 혼자 공부하면서 적어간 내용이기에 평어체로 작성되었고 틀린 내용이 있을 수 있습니다.
이 점 양해부탁드리며 틀린 내용 지적, 질문은 언제든 환영합니다!

이분 탐색(이진 탐색) 알고리즘은 정렬되어 있는 리스트에서 범위를 절반씩 좁혀가며 탐색해나가는 알고리즘이다.
(ex 배열)가 반드시 정렬되어 있어야 한다.start, end, mid 3개의 변수를 이용하여 탐색한다. start는 탐색하고자 하는 범위의 시작값, end는 범위의 마지막값, mid는 그 범위에서 중간값을 가리키고 있다.
C++로 작성한 이분탐색 코드
int binary_search(int n, int target)
{
int start = 0, end = n-1, ans=0;
while(start<=end) {
int mid = (start+end)/2;
if(target < arr[mid]) end = mid-1;
else if(target > arr[mid]) start = mid+1;
else {
ans = 1;
break;
}
}
return ans;
}
이분 탐색을 통해 찾는 값이 있다면 1을 반환하고, 없다면 0을 반환하는 코드이다.
start와 end로 지정해준다.mid에는 중간값 (정확히는 중앙의 index)을 넣어준다.target이 mid가 가리키는 값보다 작으면 end 값은 mid-1로 변경, 크다면 start 값을 mid+1로 변경한다.start 혹은 end 값이 바뀌었으므로 mid값도 다시 변경하며 반복을 계속한다.mid가 가리키는 값이 찾는 값과 일치하면 ans에 1을 저장하고 반복을 끝내며 혹은 end 값이 start 값 보다 작아지면 탐색을 종료한다.코드만 보아서는 이해가 조금 어려울 수 있으니 그림을 참고하여 보자.
위에서의 1,2번에 해당하는 과정이며 start = 0, end = 9, mid = (0+9)/2 -> 4의 값이 들어갔다. target = 4이다.
target이 arr[mid]보다 작으므로 end = mid-1 = 3이 되었고 mid = (0+3)/2 -> 1의 값이 들어갔다.
target이 mid보다 크므로 start = mid+1 = 2이 되었고 mid = (2+3)/2 -> 2가 되었다. arr[mid] = 4 = target이므로 탐색을 종료한다.
O(logN)의 시간 복잡도를 가지므로 매우 효율적이다.https://velog.io/@kimdukbae/이분-탐색-이진-탐색-Binary-Search
https://freedeveloper.tistory.com/275?category=888096