/* bsearch.cpp * Created: 2023-07-10 * Author: Aryadev Chavali */ #include #include #include #include #include #include #include using std::cin; using std::cout; using std::endl; using std::ostream; using std::string; using std::vector; ostream &print_arr(ostream &os, std::vector &arr) { os << "["; for (size_t i = 0; i < arr.size(); ++i) os << arr[i] << (i == arr.size() - 1 ? "" : ","); return os << "]"; } int bsearch(int n, std::vector arr) { int l = 0; int u = arr.size() - 1; while (l <= u) { int midpoint = l + ((u - l) / 2); int val = arr[midpoint]; if (val == n) { return midpoint; } else if (val > n) { u = midpoint - 1; } else { l = midpoint + 1; } } return -1; } int main(int argc, char *argv[]) { std::ifstream input(argc > 1 ? argv[1] : "bsearch.txt"); std::vector arr; for (std::string line; std::getline(input, line); arr.push_back(std::stoi(line))) continue; std::sort(std::begin(arr), std::end(arr)); for (size_t i = 0; i < arr.size(); ++i) { int index = bsearch(arr[i], arr); assert(index == (int)i); } return 0; }