DS静态查找之折半查找
程序员文章站
2024-03-20 20:00:28
...
题目:
问题 B: DS静态查找之折半查找
时间限制: 1 Sec 内存限制: 128 MB
提交: 315 解决: 298
[提交][状态][讨论版]
题目描述
给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从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;
class SSTable
{
int *elem;
int length;
public:
SSTable();
~SSTable();
void InitSSTable();
void Search_Bin();
};
SSTable::SSTable()
{
cin>>length;
elem = new int[length+1];
}
SSTable::~SSTable()
{
delete []elem;
}
void SSTable::InitSSTable()
{
elem[0] = 0;
for(int i=1; i<=length; i++)
cin>>elem[i];
}
void SSTable::Search_Bin()
{
cin>>elem[0];
int low = 1;
int high = length;
while(low<=high)
{
if(elem[(low+high)/2]<elem[0])
low = (low+high)/2+1;
else if(elem[(low+high)/2]>elem[0])
high = (low+high)/2-1;
else
break;
}
if(low>high)
cout<<"error"<<endl;
else
cout<<(low+high)/2<<endl;
}
int main(void)
{
SSTable myTable;
myTable.InitSSTable();
int t;
cin>>t;
while(t--)
myTable.Search_Bin();
return 0;
}