在一个有序数组中,利用二分法的思想找出数组中的内容。
#include <stdio.h>
#include <stdlib.h>
int binsearch(int x,int arr[],int left,int right)
{
while (left<=right)
{
int mid=left-(left-right)/2;
if(arr[mid]==x)
{
return mid;
}
else if(arr[mid]<x)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return -1;
}
int main()
{
int arr[]={1,3,44,55,102,129,700};
int ret=binsearch(44,arr,0,sizeof(arr)/sizeof(arr[0]-1)); //查找44
if(ret!=-1)
{
printf("%d\n",arr[ret]);
}
else
{
printf("not exist\n");
}
return 0;
}
对于程序中,需要定义中间的数组元素,一般都会想到平均int mid=(left+right)/2;但是这种处理方法有一个弊端,当数据较大时,可能会出现溢出,所以程序采用 int mid=left-(left-right)/2;这样刚好就能避免这种错误。
转载于:https://blog.51cto.com/10740590/1702957