작심 24/7

이진 탐색 (Binary Search) 본문

개념

이진 탐색 (Binary Search)

모닝수박 2022. 2. 2. 16:21
#include <iostream>
using namespace std;
int arr[8] = {1, 2, 4, 5, 10, 21, 21, 22};
int binarySearch(int st, int en, int target) { // target 찾음
    while (st <= en) {
        int mid = (st + en) / 2;
        if (arr[mid] == target) return mid;
        if (arr[mid] < target) st = mid + 1;
        else en = mid - 1;
    }
    return -1;
}
int upperBound(int st, int en, int target){ // target보다 큰 첫 번째 수 찾음
    int res = -1;
    while (st <= en) {
        int mid = (st + en) / 2;
        if (arr[mid] > target){
            res = mid;
            en = mid - 1;
        }
        else st = mid + 1;
    }
    return res;
}
int lowerBound(int st, int en, int target){ // target보다 크거나 같은 첫 번째 수 찾음
    int res = -1;
    while (st <= en) {
        int mid = (st + en) / 2;
        if(arr[mid] >= target){
            res = mid;
            en = mid - 1;
        }
        else st = mid + 1;
    }
    return res;
}
int main(){
    cout << binarySearch(0, 7, 21) << "\n";
    cout << upperBound(0, 7, 21) << "\n";
    cout << lowerBound(0, 7, 21) << "\n";
    return 0;
}

'개념' 카테고리의 다른 글

힙 (Heap)  (0) 2022.02.14
비트마스크 (BitMask)  (0) 2021.08.07
7. 계수 정렬 (Counting Sort)  (2) 2020.05.22
6. 힙 정렬 (Heap Sort)  (0) 2020.05.22
5. 합병 정렬 (Merge Sort)  (0) 2020.05.20
Comments