Array - Binary Search

JeongChaeJin·2022년 11월 10일
0

Binary Search

  • Reference
  • O(logn)의 Search를 기대하는 알고리즘이다.
  • Pivot을 간단히 설정하여 해당 Target value를 찾아내면된다.

1. Algorithm

  • 구현은 간단하지만 반드시 알고 있어야한다.
  • L은 left, R은 right 라고 가정하면 초기값은 vector 및 Array의 begin, end 값이라고 보면된다.
  • Pivot을 L과 R의 중간 Idx 로 설정하여 해당 Target과 비교하며 업데이트한다.
    • pivot이 target 보다 크다 ? -> L이 pivot + 1 index로 업데이트
    • pivot이 target 보다 작다 ? -> R이 pivot - 1 index로 업데이트
    • L과 R의 인덱스가 엇갈리면 Not Exist다.

2. Implementation

#include <iostream>
#include <vector>

int binarySearch(std::vector<int> &v, auto target)
{
    int leftIdx = 0;
    int rightIdx = v.size() - 1;
    int pivotIdx;

    while (leftIdx <= rightIdx)
    {
        pivotIdx = (leftIdx + rightIdx) / 2;

        if (v[pivotIdx] == target)
        {
            return pivotIdx;
        }
        else if (v[pivotIdx] < target)
        {
            leftIdx = pivotIdx + 1;
        }
        else
        {
            rightIdx = pivotIdx - 1;
        }
    }

    return -1;
}

int main()
{
    std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8};

    auto targetIdx = binarySearch(v, 5);

    if (targetIdx != -1)
        std::cout << "target Idx is : " << targetIdx << std::endl;
    else
        std::cout << "Not Exist" << std::endl;

    return 0;
}
target Idx is : 4
profile
OnePunchLotto

0개의 댓글