题目描述
有15个整数按由小到大顺序存放在一个数组中,输入一个整数,要求用折半查找法找出该数在数组中首次出现的序号(序号从1开始计)。如果该数不在数组中,则输出-1
输入
先输入15个已升序排列的整数并存入数组,再输入一个要查找的整数。
输出
用折半查找法找出该数在数组中首次出现的序号(序号从1开始计)。
如果该数不在数组中,则输出-1
样例输入
3 7 12 18 22 31 50 65 77 80 83 89 91 95 97
89
样例输出
12
解答:
#include<stdio.h>
int main(){
int data[15];
int i,j,N,flag=0,mid;
printf(“请输入十五个数和需要查找的数:\n”);
for(i=0;i<15;i++){
scanf(” %d\n”,&data[i]);
}
scanf(“%d”,&N);
i=0;
j=14;
//i为数组的首项,j为数组的末项,首项加末项/2=中间项;得到中间项后组成一个新的数列,以中间项为首项或者末项再与需要查找的数进行比较,如果还不能得出答案,则继续首项加末项/2;
//为什么i<=j;因为是一项一项的检验,所以末项不可能小于首项;
while(i<=j){
mid=(i+j)/2;
if(data[mid]>N){
j=mid-1;
}
else if(data[mid]<N){
i=mid+1;
}
else if(data[mid]==N){
printf(“该数在数组中的序号为:%d”,mid+1);
flag=1;
break;
}
}
if(flag==0){
printf(“-1”);
}
return 0;
}