一、分块查找(索引顺序查找):
这是一种性能介于顺序查找和折半查找之间的一种查找方法,是顺序查找和折半查找两种算法的简单合成。
块内无序,块间有序
所谓 “分块有序” 指的是第二个子表中所有记录的关键字均大于第一个子表中的最大关键字,第三个子表中的所有关键字均大于第二个子表中的最大关键字。
二、算法适用情况:
由于块内是无序的,故插入和删除比较容易,无需进行大量移动。 如果线性表既要快速查找又经常动态变化,则可采用分块查找。
使用条件:线性表必须要能实现分块之间有序。
三、程序代码
3.1、代码:
#include<iostream>
using namespace std;
struct index
{
int beg;
int key;
int end;
}s[3];
void myfind(int flag, int* a)
{
int i;
for (i = 0; i < 3; i++)
{
if (flag <= s[i].key)
break;
}
if (i == 3)
{
cout << "没找的" << endl;
return;
}
for (int j = s[i].beg; j <=s[i].end; j++)
{
if (a[j] == flag)
{
cout << "找到了" << endl;
return;
}
}
cout << "没找到" << endl;
}
int main()
{
int a[15] = { 11,12,18,28,39,56,69,89,96,122,135,146,156,256,298 };
int b;
int j = 0;
cout << "请输入要查找的数:";
cin >> b;
for (int i = 0; i < 3; i++)
{
s[i].beg = j;
s[i].end = j + 4;
s[i].key = a[j + 4];
j += 5;
}
myfind(b, a);
system("pause");
return 0;
}