问题分析:
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
代码:
#include "stdio.h"
int main()
{
int n,i;
printf("请输入要查询的序列的元素个数:\n");
scanf("%d",&n);
int a[n+1];
printf("请输入要查询的序列:\n");
for(i=1;i<n+1;i++)
{
scanf("%d",&a[i]);
}
int key;
i=1;
printf("请输入要查询的元素:\n");
scanf("%d",&key);
int low,mid,high;
low=1;
high=n;
mid=(low+high)/2;
while(low<=high)
{
if(a[mid]>key)
{
high=mid-1;
mid=(low+high)/2;
}
else if(a[mid]<key)
{
low=mid+1;
mid=(low+high)/2;
}
else
{
printf("元素的位置为:%d",mid);
break;
}
}
if(low>high)
printf("此数列中没有该元素");
return 0;
}