什么叫折半?就是用已知的数与一个有序数列序列号最中间的数相比较,缩小查找范围。
先写查找函数binsearch,三次判断。然后主函数调用。
#include<stdio.h>
int binsearch(int a[],int x,int len)
{
int left = 0;
int right = len - 1;
int mid = 0;
while(left <= right)
{
mid = (left + right)/2;
if(x == a[mid]) //x = <span style="font-family: Arial, Helvetica, sans-serif;">a[mid] 时,直接就可以输出下标</span>
{
return mid;
}
if(x < a [mid]) //<span style="font-family: Arial, Helvetica, sans-serif;">x < a [mid]时,右边界变为中间下标-1</span>
{
right = mid - 1;
}
if(x > a[mid]) //<span style="font-family: Arial, Helvetica, sans-serif;">x > a [mid]时,左边界变为中间下标+1</span>
{
left = mid + 1;
}
}
return -1; //如果查不到返回-1
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8};
int ret = 0;
ret = binsearch(a,6,sizeof(a)/sizeof(a[0])); //计算数组长度
printf("%d\n",ret);
return 0;
}