折半查找()

折半查找的查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。

每条待查记录包含关键字项和其他项,如关键字项为15,其他项为该记录在查找表里的原序号4。

对无序表的查找,还需要事先排列成有序表,再进行折半查找。

输入:

5 (记录的条数)

各记录项:如 32 1

输出:

已按关键字排列好的非递减序列:如 (16 2)(20 5)(32 1)(35 3)(91 4)

找不到时输出: error

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 11↵
  2. 5 1↵
  3. 13 2↵
  4. 19 3↵
  5. 21 4↵
  6. 37 5↵
  7. 56 6↵
  8. 64 7↵
  9. 75 8↵
  10. 80 9↵
  11. 88 10↵
  12. 92 11↵
  13. 56↵
以文本方式显示
  1. (5 1)(13 2)(19 3)(21 4)(37 5)(56 6)(64 7)(75 8)(80 9)(88 10)(92 11)↵
  2. (56 6)↵
1秒64M0
测试用例 3以文本方式显示
  1. 10↵
  2. 5 3↵
  3. 20 4↵
  4. 100 5↵
  5. 75 6↵
  6. 63 7↵
  7. 19 8↵
  8. 18 9↵
  9. 23 10↵
  10. 32 11↵
  11. 35 12↵
  12. 36↵
以文本方式显示
  1. (5 3)(18 9)(19 8)(20 4)(23 10)(32 11)(35 12)(63 7)(75 6)(100 5)↵
  2. error↵
1秒64M0

代码如下:

         (别问为什么不自己写查找和排序,问就是懒!)

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值