01: #include <iostream>
02: #include <vector>
03: #include <cstdlib>
04: #include <ctime>
06: using namespace std;
08: /**
09:    Finds an element in a sorted vector.
10:    @param v the sorted vector with the elements to search
11:    @param from the start of the range to search
12:    @param to the end of the range to search
13:    @param a the value to search for
14:    @return the index of the first match, or -1 if not found
15: */
16: int binary_search(vector<int> v, int from, int to, int a)
17: {  if (from > to)  return -1;
20:    int mid = (from + to) / 2;
21:    int diff = v[mid] - a;
22:    if (diff == 0) /* v[mid] == a */
23:       return mid;
24:    else if (diff < 0) /* v[mid] < a */
25:       return binary_search(v, mid + 1, to, a);
26:    else
27:       return binary_search(v, from, mid - 1, a);
28: }
30: /** 
31:    Prints all elements in a vector
32:    @param a the vector to print
33: */
34: void print(vector<int> a)
35: {  for (int i = 0; i < a.size(); i++)
37:       cout << a[i] << " ";
38:    cout << "\n";
39: }
41: /**
42:    Sets the seed of the random number generator.
43: */
44: void rand_seed()
45: {  int seed = static_cast<int>(time(0));
47:    srand(seed);
48: }
50: /** 
51:    Computes a random integer in a range.
52:    @param a the bottom of the range
53:    @param b the top of the range
54:    @return a random integer x, a <= x and x <= b
55: */
56: int rand_int(int a, int b)
57: {  return a + rand() % (b - a + 1);  }
60: 
61: int main()
62: {  rand_seed();
64:    vector<int> v(20);
65:    v[0] = 1;
66:    for (int i = 1; i < v.size(); i++)
67:       v[i] = v[i - 1] + rand_int(1, 10);
68: 
69:    print(v);
70:    cout << "Enter number to search for: ";
71:    int n;
72:    cin >> n;
73:    int j = binary_search(v, 0, v.size() - 1, n);
74:    cout << "Found in position " << j << "\n";
75:    return 0;
76: }