🔻Extracurricular Activity/ALCUK

[2022 겨울학기] 7주차 - 이분탐색

_니지 2022. 4. 10. 13:25

1. 이분탐색(Binary Search)이란?

탐색 범위를 절반씩(두 부분으로 나누어서) 줄여 가며 원하는 값을 찾는 방식

이분 탐색을 실시하기 위해선 정렬된 배열이나 벡터가 필요하다

시간복잡도 또한 탐색 범위가 절반씩 줄어든다. -> O(logN)

 

2. 동작 원리

-이분 탐색

배열이나 벡터를 정렬한다

left, right값(범위의 최소, 최대)으로 mid값을 설정한다

mid값과 구하고자 하는 값(ans)를 비교한다

mid < ans --> mid+1        mid > ans --> mid-1

ans를 찾을 때까지 반복

 

-결과값

구하고자하는 값을 찾았을 때 값을 리턴한다

최적의 해를 찾는 경우 left <= right까지 반복한다

목표값을 찾지 못한 경우 left > right이 되므로 종료된다

 

 

3. 코드

int arr[100005];

int binarySearch(int left, int right, int find) {
	
	while (left <= right) {
		int mid;
		mid = (left + right) / 2;

		if (find == arr[mid]) {
			return 1; //수가 존재하면 1 반환
		}
		else if (find > arr[mid]) {
			left = mid + 1;
		}
		else { //find < arr[mid]
			right = mid = 1;
		}

		return 0; //값을 찾지 못함(수가 존재하지 않음), 0 반환
	}
}
int arr[100005];

int binarySearch(int left, int right, int find) {

	int mid;
	mid = (left + right) / 2;

	if (find == arr[mid])
		return 1;
	if (left > right)
		return 0;

	if (arr[mid] < find)
		return binarySearch(mid + 1, right, find);
	else
		return binarySearch(left, mid - 1, find);

}

 

※공부 중 작성한 내용이기에 틀린 부분이 있을 수도 있습니다!

728x90
반응형