分块查找-索引顺序查找

分块查找,⼜称索引顺序查找,算法过程如下:
①在索引表中确定待查记录所属的分块(可顺序、可折半)
②在块内顺序查找

特点:块内⽆序、块间有序

#include <iostream>
#include <map>         //利用STL中的map来建立索引表
using namespace std;
const int N = 15;

int blocksort(int(&s)[15], map<int, int>& map1, int k);

int main()
{
    int k, n = 5;
    int s[] = { 1,3,2,0,4,9,6,5,8,7,12,11,10,13,14 };  //每5个数为一块
    map<int, int>map1;     //建立索引表
    map1.insert(map<int, int>::value_type(0, 4));    //三种map的插入方式,效果相同
    map1.insert(pair<int, int>(5, 9));
    map1.insert(make_pair<int, int>(10, 14));

    k = blocksort(s, map1, 11);

    if (k == N)
        cout << "查找失败" << endl;
    else
        cout << "元素所在位置:" << k << endl;
}

int blocksort(int(&s)[15], map<int, int>& map1, int k)
{
    int index, blocksize = 5;
    int i = 0;
    //int a[3];   //获取map索引值的两种方法
    //way 1
    //a[0] = map1.at(0);
    //a[1] = map1.at(5);
    //a[2] = map1.at(10);
    //way 2   迭代方式
    //map<int,int>::iterator it;
    //for(i,it = map1.begin(); it != map1.end(); ++it,++i)
    //  a[i] = it->second;


    map<int, int>::iterator it;
    for (i, it = map1.begin(); it != map1.end(); ++it, ++i) {
        if (k <= it->second) {
            index = it->first;
            break;
        }
    }

    for (i = index; i < index + blocksize; i++)
    {
        if (s[i] == k)
            return i;
    }
    return N;  //false
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值