#include using namespace std; const int FAIL = -1; const int LENGTH = 100; int comparisons; int search(int data[], int length, int value); int bsearch(int data[], int length, int value); int bsearch_sub(int data[], int first, int last, int value); int main() { int data[LENGTH]; for (int i = 0; i < LENGTH; i++) data[i] = i+1; int value; int index; for (value = 5; value < LENGTH; value += 10) { cout << "** Linear search:" << endl; comparisons = 0; if ( (index = search(data, LENGTH, value)) != FAIL ) cout << "Found " << value << " at index " << index << endl; cout << "search(): number of comparisons is " << comparisons << endl << endl; cout << "** Binary search:" << endl; comparisons = 0; if ( (index = bsearch(data, LENGTH, value)) != FAIL ) cout << "Found " << value << " at index " << index << endl; cout << "bsearch(): number of comparisons is " << comparisons << endl << endl; } return 0; } int search(int data[], int length, int value) { for (int i = 0; i < length; i++) { comparisons++; if (data[i] == value) return i; } return FAIL; } int bsearch(int data[], int length, int value) { comparisons = 0; return bsearch_sub(data, 0, length-1, value); } int bsearch_sub(int data[], int first, int last, int value) { comparisons++; if (first > last) return FAIL; int mid = (first + last) / 2; if (data[mid] == value) return mid; else if (data[mid] > value) return bsearch_sub(data, first, mid-1, value); else // data[mid] < value return bsearch_sub(data, mid+1, last, value); }