2.1 KiB
2.1 KiB
Binary Search Algorithm
2022-06-13 15:46
Algorithms:
#algorithm #binary_search
Data structures:
#array #vector #set #multiset
Difficulty:
#CS_analysis #difficulty_easy
Related problems:
Links:
How to implement Binary search?
a: Use cpp's library
Use cpp's set's find or equal_range
b: Manual
-
Tips:
[!tip] Why
mid = l + (r - l) / 2
, notmid = (l + r) / 2
Avoids integer overflow when l and r is big[!tip] Why
r = array.size() - 1
Avoids OOB when (l == r && r == array.size()) This happens if 1 is not subtracted-
Use a while loop: Leetcode Search-a-2D-Matrix
-
Use recursion: from g4g:
// C++ program to implement recursive Binary Search #include <bits/stdc++.h> 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; }
-