한 단계마다 탐색 범위를 1/2로 줄이므로 연산 횟수는 log2(N)에 비례합니다.
#include <iostream>
#include<vector>
using namespace std;
int binarySearch(vector<int>&v, int target, int start, int end) {
while (start <= end) {
int mid = (start + end) / 2;
if (target > v[mid]) {
start = mid + 1;
}
else if(target < v[mid]) {
end = mid - 1;
}
else {
return mid;
}
}
return -1;
}
int n, target;
vector<int> v;
int main() {
cin >> n >> target;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.push_back(x);
}
int result = binarySearch(v, target, 0, n - 1);
if (result == -1) {
cout << "원소가 존재하지 않습니다." << '\n';
}
else {
cout << result + 1 << '\n';
}
return 0;
}
vector<int>&v &를 하지 않으면 값을 복사하기 때문에 O(N)의 시간복잡도가 생성되므로 레퍼런스 값을 매개변수로 지정해야합니다.int result = binarySearch(v, target, 0, n - 1);