⑴ 求分块查找算法 最好有代码和详细注释
注意:采用“二分查找”时,初始的数组或其他线性表中的每个元素都必须是按一定的顺序排列的(从大到小,或从小到大),
该算法的基本思想:对一个有序数据序列,总是先把查找目标与该序列的中间的元素进行比较,我们假设该序列是由从小到大排列的,if(key > data[mid]),则key一定在data[mid]的又边,于是,把mid到序列data[end]分成一块,此时mid = (mid + end) / 2,依次类推
参考程序:
#include<stdio.h>
#define MAXSIZE 26 //定义索引表的最长长度
typedef char TYPE;
int blksearch(TYPE R[],TYPE K);
void main()
{
int num, i;
TYPE R[N + 1];
TYPE K;
for(i = 0;i<N;i++)
R[i]='a'+i;
printf("\nplease input the key number:\n");
K=getchar();
num=blksearch(R,K);
if(num!=-1)
printf("第%d个是关键字\n",num+1);
else
printf("查找失败!\n");
}
int blksearch(TYPE R[],TYPE K) //分块查找
{
int low1,mid,high1;
low1=0;
high1=N - 1; //二分查找区间上下界初值
while(low1<=high1)
{
mid=(low1+high1)/2;
if(K < R[mid])
high1=mid-1;
else
if(K > R[mid])
low1=mid+1;
else
return mid; //如果找到key,立即返回key的位置
}
return -1;// 只要上面的return语句没执行,则原数组中无key,返回-1
}
⑵ 分块查找(C语言)
i=idx[low1].low是块中第一个元素的起始位置的值
int blksearch(sqlist r,index idx,find=0,hb;) // bn为块个数 //
{ int i,;low=1,high1=bn,midl,find=0,hb;
while(low1<=high1&&!find)
{mid=(low1+high1)/2;
if(k<idx[mid1].key)high1=mid-1;
else if(k>idx[mid1],key)low1=mid1+1;
else{
low=mid1;
find=1;
}
到这里是初步锁定要查的元素在那个块,找到大的方向后 在块里进行进一步的搜索
if(low1<bn)//如果low1的值没有超过块的总个数
i=idx[low1].low; //i赋值为该块内第一个元素的起始位置
然后进一步查到元素
⑶ http://www.baidu .com/
们我现在有一个C++作业题不会做,特向你们求助,恳请你们能给我些帮助!!!下面是问题的题目及要求,谢谢你的帮助!
一、题目:用分块查找方法解决在数据库中查找与关键字相同记录的问题
1. 基本要求:
(1)要求用C++模块化设计的思想来完成程序的设计;
(2)要求各个功能分别使用函数来完成,主函数和各个函数分别存放在不同的.cpp文件中,要求使用头文件;
(3)程序调试通过后,完成程序文档的处理,加必要的注释。
三、设计方法和基本原理
1. 问题描述:
在一组无序数列中查找某个数据,找到则输出该数据,否则输出未找到信息。
2. 问题的解决方案:
根据问题的描述,可以按照要求的功能采用结构化的设计思想。
(1) 数列的赋值要求编写独立函数实现;
(2) 将无序数列排序为有序数列可以用“拉锯法”排序法也可以用其他方法实现,并编写独立函数;
(3) 分块查找的算法用独立函数实现
四、主要技术问题的描述
根据三的分析,主要问题在于:
1、排序算法的实现(不限方法)
2、分块查找方法的实现
分块查找又索引查找,它主要用于“分块有序”表的查找。所谓“分块有序”是指将线性表L(一维数组)分成m个子表(要求每个子表的长度相等),且第i+1个子表中的每一个项目均大于第i个子表中的所有项目。“分块有序”表应该包括线性表L本身和分块的索引表A。因此,分块查找的关键在于建立索引表A。
(1)建立索引表A(二维数组)
索引表包括两部分:关键字项(子表中的最大值)和指针项(子表的第一项在线性表L中位置)
索引表按关键字有序的。
例如:线性表L(有序)为:1 2 3 4 5 6 7 8 9 10 11 12
分成m=3个子表:{1 2 3 4} {5 6 7 8} {9 10 11 12}
索引表A:二维数组:第一列为每个子表的最大值 ,第二列为每个子表的起始地址
即: 4 0
8 4
12 8
⑷ 分块查找算法中如何对数据分块
可以实现确定待查找数据的上限和下限,
然后对该区间等分N块,
那么这N块就可以作为分块查找的块,
然后将原数组中的元素按区间插入进去,
当然,这样划分不能保证每个块中的元素个数相等,
但是,分块查找算法并不严格要求每块中的元素的个数相等。