具体思路
二分查找只适用于递增或递减的数组,在这里我们统一为递增数组,下面,我们先来简单介绍一下二分查找的具体思路。给出下面一组数组{1,2,3,4,5,6,7,8,9,10}。它们的下标为0~9,我们要在这组数组中找到数字7。第一次查找,最左边和最右边的下标之和的平均值为4,我们锁定了数字5,因为5比7小,所以我们要找的数字只可能在5的右边,5左边的数字可以忽略了。第二次查找,数字6和数字10的下标之和的平均值为7,我们锁定了数字8,因为8比7大,所以要找的数字只可能在8的左边。接着又进行第三次查找……找到数字7的过程中,我们只用了四次查找,可以看出效率比普通查找高出不少。
代码实现
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 k = 7;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else if (left = right)
{
printf("找到了,下标是%d\n", mid);
break;
}
}
return 0;
}