하지만 시간은 충분하지 않은 경우가 많다.
시간 복잡도
: O(N)전제
: 배열 내부의 데이터가 정렬되어 있다.사용 변수
: 시작점
, 끝점
, 중간점
시간 복잡도
: O(logN)(이진 탐색 실행과정 생략)
중간 값-1
로 함수 재귀 호출중간 값+1
로 함수 재귀호출시작점> 끝점
소스 코드
#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int>& arr, int target, int start, int end) {
if (start > end) return -1;
int mid = (start + end) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] > target) return binarySearch(arr, target, start, mid - 1);
else return binarySearch(arr, target, mid + 1, end);
}
int n, target;
vector<int> arr;
int main(void) {
cin >> n >> target;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
int result = binarySearch(arr, target, 0, n - 1);
if (result == -1) {
cout << "원소가 존재하지 않습니다." << '\n';
}
else {
cout << result + 1 << '\n';
}
}
시작점>끝점
(재귀 함수 종료 조건과 동일)소스코드
#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int>& arr, int target, int start, int end) {
while (start <= end) {
int mid = (start + end) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] > target) end = mid - 1;
else start = mid + 1;
}
return -1;
}
int n, target;
vector<int> arr;
int main(void) {
cin >> n >> target;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
int result = binarySearch(arr, target, 0, n - 1);
if (result == -1) {
cout << "원소가 존재하지 않습니다." << '\n';
}
else {
cout << result + 1 << '\n';
}
}