一、上机实验的问题和要求:
设计一程序:输入关键字(整数)有序系列构成查找表,然后输入若干数据进行折半查找并给出查找结果。
二、程序设计的基本思想,原理和算法描述:
折半查找基本思想:
1.设定查找范围的下限low,上限high,
由此确定查找范围的中间位置mid;
2.中间位置的值等于待查的值,查找成功
中间位置的值小于待查的值,low=mid+1
中间位置的值大于待查的值,high=mid-1
3.直到low>high,查找失败。
折半查找算法:
int BinarySearch(int s[],int n,int key)
{
int low,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(s[mid]==key) //中间元素与关键字相等
return mid;
else if(s[mid]>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
return -1; //查找失败返回-1
}
三、调试和运行程序过程中产生的问题及采取的措施:
调试程序时未发现错误
四、源程序及注释
#include<stdio.h>
#define NUM 10
int a[]={6,12,28,37,54,65,69,83,90,92};
int BinarySearch(int s[],int n,int key)
{
int low,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(s[mid]==key) //中间元素与关键字相等
return mid;
else if(s[mid]>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
return -1; //查找失败返回-1
}
int main()
{
int key,pos;
printf("原数据为:");
for(int i=0;i<NUM;i++)
printf("%d ",a[i]);
printf("\n");
printf("请输入需要查找的数字:");
scanf("%d",&key);
pos=BinarySearch(a,NUM,key);
if(pos>=0)
printf("查找成功!在第%d位!",pos+1);
else
printf("查找失败!");
return 0;
}
五、运行结果