//实验内容: //在待查找序列中查询指定的数据元素 #include<stdio.h> #include<stdlib.h> //函数声明 int main() { //定义能存储5个整数的一维数组,初始化为3,5,6,8,9 int data[5]={3,5,6,8,9}; //提示用户输入要查找的数据(可以是数组中存在的数据,也可以是数组中不存在的数据) printf("请输入要查找的数据:"); //读入该数据,存储到变量key中 int key; scanf("%d",&key); //调用折半查找函数,查找该数据,如果查找成功则返回该数据在数组中的下标,如果查找失败则返回-1 int result; result=BinarySearch(data,key,5); //输出查找结果 if(result==-1) printf("不存在这个数据!"); else printf("数据%d在数组中的下标为%d",key,result); return 0; } int BinarySearch(int a[],int key,int n) //折半查找函数,在存储n个数据的数组a中查找给定的元素key,如果查找成功则返回该数据在数组中的下标,如果查找失败则返回-1 { //定义变量low和high,分别用于存储搜索空间的第一个元素下标和最后一个元素下标 //初始化low为0,high为n-1 //当low<=high时,循环在数组a[]中查找给定的元素key while(low<=high) { //定义整型变量middle,用于存放搜索空间的中间元素的下标 //计算中间元素的下标,存储到middle变量中 //比较key变量中的值和a[middle]中的值 //如果key==a[middle],则返回middle //如果key<a[middle],则修改high变量为middle-1 //如果key>a[middle],则修改low变量为middle+1 } //退出循环意味着low>high,查找失败,返回-1 }