进行二分查找的前提是在一个有序排列的数组中查找指定元素。
例如,对一个升序排列的整型数组进行二分查找:
// 二分查找
// 参数1:arr--需要传入一个有序的、按升序排列(从小到大)的整型数组
// 参数2:len--数组的长度(数组的元素个数)
// 参数3:target--要查找的元素// 返回值:返回找到的元素在数组中的下标(索引index),如果没有找到,则返回-1
int binary_search(int *arr, int len, int target)
{int left = 0; // 起始索引int right = len - 1; // 结束索引while (left <= right) // 如果起始索引和结束索引没有重合,继续查找{int mid = (left + right) / 2; // 中间索引,这么写能够防止整型溢出// 也可以写成 int mid = left + (right - left) / 2; // 这两条代码是一样的if (arr[mid] == target){// 如果找到了元素,返回索引return mid;}else if (arr[mid] < target){// 如果当前的中间值小于要查找的目标元素,说明目标可能在右侧,// 需要调整左边界(起始索引)left = mid + 1;}else{// 如果当前的中间值大于要查找的目标元素,说明目标可能在左侧,// 需要调整右边界(结束索引)right = mid - 1;}}// 如果起始索引和结束索引重合了都没有找到目标元素,说明这个元素不在当前数组中,// 返回-1return -1;
}