(以下以升序为例)
输入的参数为数组下标的上下界,这是因为不同层的递归需要区分
int BinarySearchRec(int arr[], int low, int high, int target) { if (arr == NULL || low > high) // 都要考虑点非法输入 return -1; int mid = low + (high - low) / 2; // 避免溢出 int pos = -1; // 为方便记忆,统一以pos表示返回值 if (arr[mid] == target) pos = mid; else if (arr[mid] > target) pos = BinarySearchRec(arr, low, mid - 1, target); else pos = BinarySearchRec(arr, mid + 1, high, target); return pos; }非递归输入的参数为数组长度(内部的low, high类比递归方法的不同层传入的参数)
int BinarySearch(int arr[], int len, int target) { if (arr == NULL || len <= 0) return -1; int low = 0, high = len - 1; int pos = -1; while (low <= high) { // !!!等于号易漏 int mid = low + (high - low) / 2; if (arr[mid] == target) { pos = mid; break; // 此处跳出循环,表示命中 } else if (arr[mid] > target) high = mid - 1; else low = mid + 1; } // 此处跳出循环,表示没有命中,pos维持初始值-1 return pos; }http://blog.csdn.net/nishiwodeangel/article/details/10748615