C语言:二分法查找
- 分别将一个有序数组最大值元素,最小值元素,中间值元素的序号找出
- 将输入的数与数组中间值作比较,如果大于中间值,则将范围缩小为数组右半边,如果小于中间值,则将范围缩小为数组左半边
- 并在新范围中将数组最大值元素,最小值元素,中间值元素的序号找出
- 重复操作,直到输入元素等于某个新范围的中间值,则结束程序并输出结果
- 若出现最大值元素小于最小值元素,则表明该数组无输入值,结束程序并输出结果
- 设置一个数组(有序),元素数个假定为 M ;
- 设置一个 found = 0 ;
- 设置三个变量,分别为 high,low,mid ;
- high 表示该数组最后一个数(最大的一个数),low 表示该数组第一个数(最小的一个数),mid 表示该数组中间值
- 输入一个数 a ;
- 将 0 赋给 low ,将(M - 1)赋给 high ;
- 令 mid = (high + low ) / 2 ;
- 判断 a 与 A[mid] 的大小 ;
- 如果 a 大于 A[mid],则 ( low + 1 ),继续循环;如果 a 小于 A[mid],则 ( high + 1 ),继续循环;如果 a 等于 A[mid],令 found = 1 ,终止程序并输出结果 ;
- 若出现 low > high ,则表明该数组无输入值,终止程序并输出结果
#include<stdio.h>
int main()
{
int A[10]={
1,2,3,5,7,12,24,35,36,38};
int high=9,low=0,mid,found=0;
int a;
scanf("%d",&a);
while(low<=high)
{
mid=(high+low)/2;
if(a>A[mid])
{
low=mid+1;
}
if(a<A[mid])
{
high=mid-1;
}
if(a==A[mid])
{
found=1;
break;
}
}
if(found==1)
printf("Founded!");
else printf("No!");
}