Untitled

이분 탐색 정렬

  1. start, mid, end 로 리스트를 나눔

Untitled

  1. mid 이하에 19가 없으므로 범위를 반으로 줄일 수 있다.

Untitled

  1. 2의 과정 반복

Untitled

  1. 2의 과정 반복

Untitled

  1. O(logN) 시간 복잡도를 가짐

Untitled

/* binary search */
#include <iostream>

int a[100005];
int n;

int bainarysearch(int target){
	int start = 0;
	int end = n-1;
	while(start <= end){
		int mid = (start + end) / 2;
		if(a[mid] < target)
			start = mid + 1;
		else if(a[mid] > target)
			end = mid - 1;
		else 
			return 1;
	}
	/* start > end 경우 while 문 탈출 */
	return 0;
}

/* lower_idx  = lower_bound(stl 함수) */
/* (반대) upper_bound(stl 함수) */
int lower_idx(int target, int len){
	int start = 0;
	int end = len;
	while(start < end){
		int mid = (start + end) / 2;
		if(a[mid] >= target) end = mid;
		else strat = mid + 1;
	}
return start;
}

int main(void){
	cin >> n;
	for(int i = 0; i < n; i++) cin >> a[i];
	sort(a, a + n); /* 배열 정렬 */
	int m;
	cin >> m;
	while(m--){
		int t;
		cin >> t;
		cout << binarysearch(t) << '\\n';
	}
}

이분 탐색 주의 사항

  1. 이분 탐색을 하고자 한다면 주어진 배열은 정렬되어 있어야 함
  2. 무한 루프에 빠지지 않게 mid 값을 정해야 한다. (적절한 mid 값 정해야 함)