二分查找 ,将所给关键词和指定有序集合中间数进行比较,如果比较相等则返回结果,如果不相等,则按照所给出的结果,将集合减半后继续查找
//二分查找(折半查找)
int BinarySearch1(int a[], int value, int n)
{
}
------------------------------------------------------------------------------------------------------
插值查找
这里的插值查找法,是对二分法的一种改进。此法和二分法一样对数据要求有序且尽量分布均匀。
对于二分法有:
mid = (low + high)/2;
不难得到 mid = low + 1/2*(high-low);
试想,对于在字典中进行查找时,对于'you'或’and’ 来说,我们通常的处理方法肯定不是从中间开始进行查找,而是根据所给出的值,大致确定范围后再来进行查找。
这里的大致范围是通过,所查找的value值在所查集合中所大概处于的位置,定位到后进行比较
故有如下公式:
key = low + ((value - a[low])/(a[high]-a[low]))*(high -low);
伪代码:
int insertseek(int value,int map[])
while(low<=high)
key = low + ((value - low)/(high-low))*(high -low);
if(key = value) return key;
else if(key < value) low = key;
else
high = key;