问题描述
已知数据a中一共有10个已排序的整数(由小到大排列)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置来,否则打印“找不到“。 (提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。)
部分功能代码
#include<stdio.h>
int search(int x);
int search(int x)
{
int l=0,m,h=9,a[10]={1,2,3,4,5,6,7,8,9,10};
m=(l+h)/2;
.
.
.
if(a[m]==x)
return m+1;
return -1;
}
void main()
{
while(1)
{
int x ;
printf("请输入x: ");
scanf("%d",&x);
int pos = search(x);
if(pos == -1)
printf("找不到\n");
else
printf("位置:%d\n",pos );
}
}
运行结果

本文介绍了一个简单的二分查找算法实现过程,通过一个已排序的数组进行查找操作,并返回目标值的位置或者找不到的信息。该算法利用了二分查找的原理,不断缩小查找范围,直至找到目标值或确定目标值不存在于数组中。
&spm=1001.2101.3001.5002&articleId=123819646&d=1&t=3&u=f5640ed2ec474fe4ac32dc427b24a95c)
875

被折叠的 条评论
为什么被折叠?



