提示:
(提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。)
首先明确一点,题目中的数据a是已知条件,不需要因考虑复用性然后进行数组的输入及排序。而后在判断的时候这里采用布尔值的形式。其次,提示内容就是二分法所表达的内容,也就是search子函数的主体while循环的内容.
#include<stdlib.h>
#include<stdio.h>
#define i 10
int search(int *a,int s,int k)
{
int l = 0;
int h = s-l;
while(l<=h)
{
int m = (l+h)/2;
if(k==a[m])
{
return m;
}
else
{
if(k<a[m])
h=m-1;
else
l=m+1;
}
}
return 1;
}
int main()
{
int index,key,a[i]={
2,4,6,8,10,12,14,16,18,20};
printf("请输入你想找的数:");
scanf("%d",&key);
index = search(a,i,key);
if(index!=1)
printf("%d在数组中的位置是%d\n",key,index);
else
printf("没找到\n");
}
对我的博客或其他方面有任何见解或问题的话都可以私信我
或者联系本人QQ:3128909688
微信:DreamHerome
欢迎致电