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;//high的大小定义为元素个数减一,也就是数组中的最后一个 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;//在数列中找到输入值后的操作,如果未找到则 found = 0 ; break;//终止程序 } } if(found==1)//在数组中找到输入数 printf("Founded!"); else printf("No!"); }