假设在数组arr[10]={1,2,3,4,5,6,7,8,9,0}中查找4,如果有输出其下标
#include<stdio.h>
#include<string.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,0};/假设查找在一个数组中查找
int left=0;//查找范围左边界
int right=sizeof(arr[10])-1;//查找范围左边界
int mid=0;
int k=4;//假设要查找4
while(left<=right)
{
mid=(left+right)/2;
if(arr[mid]<k)
{
left=mid+1;//已经知道数据不在原来left和mid之间,因此放弃这段区域,重新设置left
}
else if(arr[mid]>k)
{
right=mid-1;//已经知道数据不在原来mid和right之间,因此放弃这段区域,重新设置right
}
else
{
printf("找到了,下标为%d\n",mid);
break;
}
}
if(left>right)
{
printf("找不到\n");
}
return 0;
}
每次的查找范围缩小一半,效率很高