关于二分查找
2014-07-30 09:01
225 查看
1、首先二分查找判断元素是否存在,存在返回其位置,不存在返回-1.代码如下:
2、
1)二分法寻上界:
2、若要寻找严格的上下界,则把上面的大小判断修改即可:换成大于等于和小于等于。
去掉判断数组边界的等号:
target >= array[high]改为 target > array[high]
在与中间值的比较中加上等号:
array[mid] > target改为array[mid] >= target
int bsearchWithoutRecursion(int array[], int low, int high, int target) { while(low <= high) { int mid = (low + high)/2; if (array[mid] > target) high = mid - 1; else if (array[mid] < target) low = mid + 1; else //find the target return mid; } //the array does not contain the target return -1; <pre name="code" class="cpp">
2、
1)二分法寻上界:
//Find the fisrt element, whose value is larger than target, in a sorted array int BSearchUpperBound(int array[], int low, int high, int target) { //Array is empty or target is larger than any every element in array if(low > high || target >= array[high]) return -1; int mid = (low + high) / 2; while (high > low) { if (array[mid] > target) high = mid; else low = mid + 1; mid = (low + high) / 2; } return mid; }2)二分法寻下界:
//Find the last element, whose value is less than target, in a sorted array int BSearchLowerBound(int array[], int low, int high, int target) { //Array is empty or target is less than any every element in array if(high < low || target <= array[low]) return -1; int mid = (low + high + 1) / 2; //make mid lean to large side while (low < high) { if (array[mid] < target) low = mid; else high = mid - 1; mid = (low + high + 1) / 2; } return mid; }
2、若要寻找严格的上下界,则把上面的大小判断修改即可:换成大于等于和小于等于。
去掉判断数组边界的等号:
target >= array[high]改为 target > array[high]
在与中间值的比较中加上等号:
array[mid] > target改为array[mid] >= target