AlgoPlus v0.1.0
Loading...
Searching...
No Matches
exponential_search.h
1#ifndef EXPONENTIAL_SEARCH_H
2#define EXPONENTIAL_SEARCH_H
3
4#ifdef __cplusplus
5#include <iostream>
6#include "binary_search.h"
7#endif
8
16template <typename T> int64_t exponential_search(std::vector<T> arr, T key) {
17 if (arr[0] == key) {
18 return true;
19 }
20 int64_t i = 1, n = arr.size();
21 while (i < n && arr[i] < key) {
22 i *= 2;
23 }
24 int64_t lo = i / 2, hi = std::min(i, n - 1);
25 while (lo <= hi) {
26 int64_t mid = (lo + hi) / 2;
27 if (arr[mid] == key) {
28 return mid;
29 } else if (arr[mid] < key) {
30 lo = mid + 1;
31 } else {
32 hi = mid - 1;
33 }
34 }
35 return -1;
36}
37
38#endif