#include #include using namespace std; // this uses recursion, but is not binary search (this is the long, // look at every element search) int findInArray(int* data, int size, int position, int valueToSearchFor) { cout << "findInArray(size = " << size << ", position = " << position << ")" << endl; if (position == size) return -1; else if (valueToSearchFor == data[position]) return position; else return findInArray(data, size, position+1, valueToSearchFor); } int findInArray(int* data, int size, int valueToSearchFor) { return findInArray(data, size, 0, valueToSearchFor); } // binary search using recursion int binarySearch(int* array, int first, int last, int valueToSearchFor) { cout << "binarySearch(first = " << first << ", last = " << last << ")" << endl; if (first > last) return -1; else { int middle = (first + last) / 2; if (valueToSearchFor == array[middle]) return middle; else if (valueToSearchFor < array[middle]) return binarySearch(array, first, middle-1, valueToSearchFor); else return binarySearch(array, middle+1, last, valueToSearchFor); } } int binarySearch(int* array, int size, int valueToSearchFor) { return binarySearch(array, 0, size-1, valueToSearchFor); } int main(int argc, char* argv[]) { string arrayFileName; int value; int size; int* data; int i; // prompt the user to enter a file with a list of numbers in it, read into an array // the file is formatted like those in labs that hold arrays cout << "Enter array filename: " << endl; cin >> arrayFileName; // prompt the user for a value cout << "Enter item to search for: " << endl; cin >> value; // read data ifstream inputStream; inputStream.open(arrayFileName.c_str()); inputStream >> size; data = new int[size]; for (i = 0; i < size; i++) { inputStream >> data[i]; } inputStream.close(); // regular search cout << findInArray(data, size, value) << endl; // binary search cout << binarySearch(data, size, value) << endl; }