代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int binary_search(int arr[], int k, int az)
{
int left = 0;
int right = az - 1;
while (left <= right)//while语句实现对一个数组序列实现二分查找
{
int mid = (left + right) / 2; //注意不要用成全局变量
//当折算出来的值比要查找的值小,则mid左边的值没用, left为mid加一
//当折算出来的值比要查找的值大,则mid右边的值没用, right为mid减一
//当两值相等,返回mid
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
if (arr[mid] = k)
{
return mid;
}
}
return -1;//跳出循环返回-1
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//定义一个长度为10的数组
int k = 6;//查找6
int pos = binary_search(arr, k, 10);//定义一个函数用于二分查找
//我们希望找到返回下标,找不到返回-1
if (-1 == pos)
printf("找不到");
else
printf("找得到,下标为:%d",pos);
return 0;
}
//本道题所要注意的点是不要使用全局变量,会导致不可控的结果出现
读者可以自行取代码进行调试分析
代码结果