题目描述
给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从1开始
要求使用折半查找算法
输入
第一行输入n,表示队列有n个数据
第二行输入n个数据,都是正整数,用空格隔开
第三行输入t,表示有t个要查找的数值
第四行起,输入t个数值,输入t行输出
每行输出一个要查找的数值在队列的位置,如果查找不成功,输出字符串error
样例输入
8
11 22 33 44 55 66 77 88
3
22
88
99
样例输出
2
8
error
#include<iostream>
using namespace std;
int halfFind(int*& array, int low, int high){
while(low<= high){
int mid= (low+ high)/ 2;
if(array[0]== array[mid])
return mid;
if(array[0]> array[mid])
low= mid+ 1;
if(array[0]< array[mid])
high= mid- 1;
}
return 0;
}
int main(){
int n;
cin>>n;
int* array= new int[n+ 5];
for(int i= 1; i<= n; i++)
cin>>array[i];
int num;
cin>>num;
while(num--){
cin>>array[0];
int fin = halfFind(array, 1, n);
if(fin)
cout<<fin<<endl;
else
cout<<"error"<<endl;
}
return 0;
}