题目描述
在一个有序的一维数组中,输入一个数,利用折半查找法找到该数是这个数组中的第几个数;如果该数不在数组中,则输出“No data!”
输入格式:
第一行输入一个整数n(1<=n<=15),表示该数组有几个数;第二行输入n个整型一维数组;第三行输入要查找的数。
输出格式:
如果找到该数,输出“It's position is 4!”;如果没有找到,输出“No data!”。
输入样例1:
在这里给出一组输入。例如:
5
-3 2 7 15 40
15
输出样例1:
在这里给出相应的输出。例如:
It's position is 4!
输入样例2:
在这里给出一组输入。例如:
4
0 3 6 9
5
输出样例2:
在这里给出相应的输出。例如:
No data!
代码:
#include<stdio.h>
int binary_search(int arr[],int num,int sz){
int left=0,right=sz-1;// 定义第一和最后一个数的下标
while(left<=right){
int mid=left+(right-left)/2;// 中间数字的下标
if(arr[mid]>num){// 判断中值与所查数的大小
right=mid-1;// 折半查找
}
else if(arr[mid]<num){
left=mid+1;
}
else{
return mid;// 返回下标
}
}
return -1;// 找不到,返回-1
}
int main(){
int n,i,num;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
scanf("%d",&num);
int sz=sizeof(arr)/sizeof(arr[0]);// 数组的长度
int ret=binary_search(arr,num,sz);// 返回所要查找数的下标
if(ret==-1){
printf("No data!");
}
else{
printf("It's position is %d!",ret+1);// 实际位置:下标+1
}
return 0;
}