二分查找法
#include<stdio.h>
//二分查找法,在数组arr中查找target
//如果找到target,返回相应的索引index
//如果没有找到target返回-1
int binarySearch(int arr[],int n,int target)
{
//在arr[l..r]中查找target
int l = 0, r = n-1;
while(l<=r)//当l==r时还有一个元素
{
// int mid = (l+r)/2;//当l,r时最大值时int放不下可能有bug
int mid = l+(r-l)/2;
if(arr[mid] == target)
{
return mid;
}
if(target < arr[mid])
{
//在arr[l..mid-1]中查找target
r = mid-1;//如果mid是target在上一个if就应该找到没找到说明不是不用再检查
}
else
{
//在arr[mid+1..r]中查找target
l = mid+1;
}
}
return -1;
}
int main()
{
int a[10]={1,4,6,7,8,9,12,58,96,99};
int v = binarySearch(a,10,12);
printf("%d",v);//返回的是坐标
return 0;
}