优点:
每查找一次,查找范围减半,适用于“有序”数组。
例题:
在1-10的有序数组中查找元素7的下标。
解题思路:
<1> 用 sizeof 求出数组中元素个数,从而得出 left 和 right 两个左右下标,根据 left 和 right 和的平均值求得中间坐标 mid;
<2> 通过比较 arr[mid] 和 所查找元素7 的大小,调整 left 和 right 的位置;
<3> 循环条件 left<=right; 当 left>right 时查找失败;
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = (sizeof(arr) / sizeof(arr[0]));
int left = 0;
int right = sz - 1;
int mid = 0;
int k = 7;
int n = 0;
while (left <= right)
{
mid = (left + right) / 2; //mid循环一次都要重新赋值;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[