二分查找(binary search)是编程技术领域一种非常著名也比较简单的算法,它可以使得查找元素的效率得到几何量级的提高。注意:二分查找的排序必须是一个有序的排列(从大到小或从小到大)。
二分查找算法,简单点说,就是先将一个有序排列最中间的元素x取出来与查找的元素进行比较,从而确定查找的元素是在x的左侧还是右侧(或者x本身),从而缩小查找的区间范围。然后再继续取出缩小范围后的有序排列中最中间的元素与查找的元素进行比较,再次确定待查找元素的位置。
/** 给定一个n个元素有序的(升序)整型数组nums和一个目标值target,搜索nums中的target,如果目标值存在返回下标,否则返回-1 */
int binarySearch(int* nums, int numsSize, int target)
{
/** 定义变量low存放左子表 */
int low = 0;
/** 定义变量存放右子表 */
int high = numsSize - 1;
/** 定义变量存放中间位置 */
int mid = 0;
/** 当查找范围不为0时 */
while(low <= high)
{
/** 求中间位置 */
mid = (low + high)/2;
/** 目标值大于中间值 */
if(target > nums[mid])
low = mid + 1;
/** 目标值小于中间值 */
else if(target < nums[mid])
high = mid - 1;
else
return mid;
}
/** 目标值不存在 */
return -1;
}