#include <iostream>

// Assumes that value is in the array
int LinearSearch(int *array, int size, int value)
{
  if (size <= 1)
    return 1;

  for (int i = 0; i < size; i++)
    if (array[i] == value)
      break;

  return i + 1;
}

// Assumes that value is in the array
int BinarySearch(int *array, int size, int value)
{
  if (size <= 1)
    return 1;

  int count = 0;
  int left = 0, right = size - 1;
  while (right >= left)
  {
    count++;
    int middle = (left + right) / 2;
    if (value == array[middle])
      return count;

    if (value < array[middle])
      right = middle - 1;
    else
      left = middle + 1;
  }
  return count;
}

void main(void)
{
  const int SIZE = 1000;
  int a[SIZE];

    // Generate array
  for (int i = 0; i < SIZE; i++)
    a[i] = i;

  int value = 1;
  int index = BinarySearch(a, SIZE, value);
  std::cout << "Number of compares to find " << value << " is " << index << std::endl;
}

Using the same driver code, but replacing LinearSearch with BinarySearch:

void main(void)
{
  const int SIZE = 10000;
  int a[SIZE];

  srand(time(NULL));

    // Generate array
  for (int i = 0; i < SIZE; i++)
    a[i] = i;

    // Mix it up
  // Shuffle(a, SIZE); // Don't need this now

    // Search for numbers (10 sets)
  for (int j = 0; j < 10; j++)
  {
    int total = 0;
    int attempts = 1000;
    for (i = 0; i < attempts; i++)
      total += BinarySearch(a, SIZE, (rand() % SIZE));

    cout << j + 1 << ". Average = " << (double)total / (double)attempts << endl;
  }
}
 
Output:

1. Average = 13.51
2. Average = 13.492
3. Average = 13.501
4. Average = 13.483
5. Average = 13.46
6. Average = 13.445
7. Average = 13.517
8. Average = 13.451
9. Average = 13.465
10. Average = 13.516