#include using namespace std; const int MAX_LEN = 100; int find3(int key, int x[MAX_LEN], int low, int high); int find(int key, int x[MAX_LEN], int size); int find2(int key, int x[MAX_LEN], int size); void printArray(int x[MAX_LEN], int size); int main(){ int x[MAX_LEN]; // Initialize sorted array x[0] = 0; for(int i = 1; i < MAX_LEN;i++){ x[i] = x[i-1] + rand()%5; } printArray(x, MAX_LEN); int key; cout << "Input key" << endl; cin >> key; // int index = find2(key, x, MAX_LEN);// linear/iterative binary search int index = find3(key, x, 0, MAX_LEN); // recursive binary search if(index < 0){ cout << "Error: cannot find key: " << key << endl; } else { cout << "Key: " << key << " index: " << index << endl; } return 0; } // -------- void printArray(int x[MAX_LEN], int size){ for(int i = 0; i < size; i++){ cout << x[i] << " " ; } cout << endl; } // --------linear search, does not require sorted array------ int find(int key, int x[MAX_LEN], int size){ for(int i = 0; i < size; i++){ cout << i << endl; if (key == x[i]) return i; } return -1; } // --------binary search ------ int find2(int key, int x[MAX_LEN], int size){ //binary search iterative int mid = size/2; int low = 0; int high = size; for(int i = 0; i < size && low < high; i++){ mid = (high + low)/2; if(key == x[mid]) return mid; else if (key < x[mid]) high = mid; else if (key > x[mid]) low = mid+1; cout << mid << " " << low << " " << high << endl; } return -1; } // --------binary search ------ int find3(int key, int x[MAX_LEN], int low, int high){ // binary search recursive int mid = (high + low)/2; cout << mid << " " << low << " " << high << endl; if(low >= high) return -1; if(key == x[mid]) return mid; else if (key < x[mid]) return find3(key, x, low, mid); else if (key > x[mid]) return find3(key, x, mid+1, high); }