题目描述
在 n 个整数构成的有序序列中,找到关键字 key 在序列中出现的位置。当 key在序列中不出现时,输出 No
。
为了提高查找效率,利用待查找序列有序的特征,程序使用“二分查找”的算法。二分查找的做法是:首先,将表中间位置记录的关键字与查找关键字 key 比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
在提示部分已经给出部分代码,将程序补充完整,并提交规定的部分。
输入
先输入 n 个表示待查找的序列中的元素个数。
再输入 n 个整数作为待查找序列,这些整数按从小到大的顺序排列。
最后输入要查找的数 key。
输出
输出 key 在序列出现的位置,若不出现,输出 No
。
输入输出样例
样例输入 #1
10
2 4 5 6 8 22 37 65 75 88
5
样例输出 #1
3
提示
#include <stdio.h> #define SIZE 100 int find(int *, int, int); int main() { int d[SIZE], i; int n, key, index; scanf("%d", &n); for (i= 0; i < n; i++) scanf("%d", &d[i]); scanf("%d", &key); index=find(d,n,key); if (index >= 0) printf("%d\n", index+1); else printf