# Binary Search Algorithm #### 2022-06-13 15:46 ___ ##### Algorithms: #algorithm #binary_search ##### Data structures: #DS #array #vector #set #multiset ##### Difficulty: #CS_analysis #difficulty-easy ##### Related problems: ```expander tag:#coding_problem tag:#binary_search -tag:#template_remove_me ``` - [[Leetcode Search-a-2D-Matrix]] ##### Links: - [g4g for manual implementation](https://www.geeksforgeeks.org/binary-search/) - [cppreference, find](https://en.cppreference.com/w/cpp/container/set/find) ___ ### How to implement Binary search? #### a: Use cpp's library Use cpp's set's [find](https://en.cppreference.com/w/cpp/container/set/find) or [equal_range](https://en.cppreference.com/w/cpp/container/multiset/equal_range) #### b: Manual 1. Use a while loop: [[Leetcode Search-a-2D-Matrix#Solution]] 2. Use recursion: from g4g: ```cpp // C++ program to implement recursive Binary Search #include using namespace std; // A recursive binary search function. It returns // location of x in given array arr[l..r] is present, // otherwise -1 int binarySearch(int arr[], int l, int r, int x) { if (r >= l) { int mid = l + (r - l) / 2; // If the element is present at the middle // itself if (arr[mid] == x) return mid; // If element is smaller than mid, then // it can only be present in left subarray if (arr[mid] > x) return binarySearch(arr, l, mid - 1, x); // Else the element can only be present // in right subarray return binarySearch(arr, mid + 1, r, x); } // We reach here when element is not // present in array return -1; } int main(void) { int arr[] = {2, 3, 4, 10, 40}; int x = 10; int n = sizeof(arr) / sizeof(arr[0]); int result = binarySearch(arr, 0, n - 1, x); (result == -1) ? cout << "Element is not present in array" : cout << "Element is present at index " << result; return 0; } ```