#include #include using namespace std; template int findInArray(Type* data, int size, int position, const Type & 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); } template int findInArray(Type* data, int size, const Type & valueToSearchFor) { return findInArray(data, size, 0, valueToSearchFor); } template int binarySearch(Type* array, int first, int last, const Type & valueToSearchFor) { Type middleValue; cout << "binarySearch(first = " << first << ", last = " << last << ")" << endl; if (first > last) return -1; else { int middle; middle = (first + last) / 2; middleValue = array[middle]; if (valueToSearchFor == middleValue) return middle; else if (valueToSearchFor < middleValue) return binarySearch(array, first, middle-1, valueToSearchFor); else return binarySearch(array, middle+1, last, valueToSearchFor); } } template int binarySearch(Type* array, int size, const Type & valueToSearchFor) { return binarySearch(array, 0, size-1, valueToSearchFor); } template int binarySearchIterative(Type* array, int size, const Type & valueToSearchFor) { int first, last, middle; Type middleValue; first = 0; last = size - 1; while (first <= last) { cout << "binarySearchIterative(first = " << first << ", last = " << last << ")" << endl; middle = (first + last) / 2; middleValue = array[middle]; if (valueToSearchFor == middleValue) return middle; else if (valueToSearchFor < middleValue) last = middle - 1; else first = middle + 1; } cout << "binarySearchIterative(first = " << first << ", last = " << last << ")" << endl; return -1; } int main(int argc, char* argv[]) { string arrayFileName; int size; int i; cout << "Enter array filename: " << endl; cin >> arrayFileName; // read data ifstream inputStream; inputStream.open(arrayFileName.c_str()); inputStream >> size; //int* data = new int[size]; //int value; double* data = new double[size]; double value; cout << "Enter item to search for: " << endl; cin >> value; 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; // binary search iterative cout << binarySearchIterative(data, size, value) << endl; }