int searchhelp(int * arr, int low, int high, int key) { if (low > high) { return -1; } else { int i = (low+high)/2; if (arr[i] == key) { return i; } else { if (arr[i] > key) { return (searchhelp(arr,low,i-1,key)); } else { return (searchhelp(arr,i+1,high,key)); } } } }
int searchhelp(int* arr, int low, int high, int key){ if(low >= high){ return -1; } int ind = (low+high)/2; if(arr[ind] == key){ return ind; } if(arr[ind] > key){ return searchhelp(arr, low, ind-1, key); } return searchhelp(arr, ind+1, high, key); }
/** * Use binary search to find 'key' in a sorted array of integers * * Arguments: * * arr The array to search. Must be sorted ascending. You do not need * to check. This array is from the result of your sort * function. Make sure your sort function is correct before you * start writing this function. * * length Number of elements in the array * key Value to search for in arr * * Returns: * The index of 'key', or -1 if key is not found. * * Since the array is sorted, you can quickly discard many elements by * comparing the key and the element at the center of the array. If * the key is the same as this element, you have found the index. If * the key is greater than this element, you can discard the first * half of the array. If the key is smaller, you can discard the * second half of the array. Now you have only half of the array to * search. Continue this procedure until either you find the index or * it is impossible to find a match. * * Your solution MUST use recursive function (or functions) * * Don't forget that arrays are 'zero-indexed'. Also, you must * use a binary search to pass this question. * * You will receive no point if you do the following because it is not * binary search. This is called linear search because it checks * every element. * * int ind; * for (ind = 0; ind < length; ind ++) * { * if (arr[ind] == key) * { * return ind; * } * } * return -1; */ int search(int * arr, int length, int key) { return searchhelp(arr, 0, length, key); }
/** * Use binary search to find 'key' in a sorted array of integers * * Arguments: * * arr The array to search. Must be sorted ascending. You do not need * to check. This array is from the result of your sort * function. Make sure your sort function is correct before you * start writing this function. * * length Number of elements in the array * key Value to search for in arr * * Returns: * The index of 'key', or -1 if key is not found. * * Since the array is sorted, you can quickly discard many elements by * comparing the key and the element at the center of the array. If * the key is the same as this element, you have found the index. If * the key is greater than this element, you can discard the first * half of the array. If the key is smaller, you can discard the * second half of the array. Now you have only half of the array to * search. Continue this procedure until either you find the index or * it is impossible to find a match. * * Your solution MUST use recursive function (or functions) * * Don't forget that arrays are 'zero-indexed'. Also, you must * use a binary search to pass this question. * * You will receive no point if you do the following because it is not * binary search. This is called linear search because it checks * every element. * * int ind; * for (ind = 0; ind < length; ind ++) * { * if (arr[ind] == key) * { * return ind; * } * } * return -1; */ int search(int * arr, int length, int key) { int searchhelp(int*,int,int,int); return (searchhelp(arr,0,length-1,key)); }