#include<stdio.h>
int search(int arr[],int k,int sz)
{
int left=0;//数组的左下标
int light=sz-1;//数组的右下标,因为sz代表数组元素的个数,因为数组下标从0开始,使用最右下标应该-1;
while(left<=light)
{
int mid=(left+light)/2;//每次求中间的下标
if(arr[mid]<k)
{
left=mid+1;//中间下标+1,为下次循环left的值
}
else if(arr[mid]>k)
{
light=mid-1;//上面判断所查找的值小,所以新的范围应该在左边,左边下标不变,右边下标为中间下标-1;
}
else
{
return mid;//查找的值与数组值相等,返回数组下标,
}
}
return -1;//当查找左下标超过右下标,代表查询整数不在数组范围内,返回-1;
}
int main()//主函数
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=0;
printf("想查找的整数:7");
int sz=sizeof(arr)/sizeof(arr[0]);//求出数组里元素的个数。
int ret=search(arr,7,sz);
if(-1==ret)
{
printf("无\n");
}
else
{
printf("下标为:%d\n",ret);//返回的数组下标。
}
return 0;
}