折半查找的查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
每条待查记录包含关键字项和其他项,如关键字项为15,其他项为该记录在查找表里的原序号4。
对无序表的查找,还需要事先排列成有序表,再进行折半查找。
输入:
5 (记录的条数)
各记录项:如 32 1
输出:
已按关键字排列好的非递减序列:如 (16 2)(20 5)(32 1)(35 3)(91 4)
找不到时输出: error
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
代码如下:
(别问为什么不自己写查找和排序,问就是懒!)
#include <iostream>
#include <map>
using namespace std;
int main()
{
int n, a, b, r;
cin >> n;
map<int, int> m;
for (int i = 0; i < n; i++)
{
cin >> a >> b;
m.insert(pair<int, int>(a, b));
}
cin >> r;
for (auto p = m.begin(); p != m.end(); p++)
cout << "(" << p->first << " " << p->second << ")";
cout << endl;
auto p = m.find(r);
if (p != m.end())
cout << "(" << p->first << " " << p->second << ")" << endl;
else
cout << "error" << endl;
return 0;
}