码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找的改进--差值查找

时间:2014-09-21 02:02:39      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:二分查找   差值查找   查找   

                             差值查找

    在二分查找中,我们每次比较都可以排除一半的数据量,这个已经是很高效了。如果利用关键字本身的信息,每次排除的数据量充分依赖于关键字的大小,则查找会更高效,这就是差值查找的思想。

下面通过示例代码,比较二分查找和差值查找的不同,在不同中领略差值查找的改良之处。

#include <stdio.h>
#include <stdlib.h>
int InterSearch(int *array, int n, int key)
{
	if (array && n > 0)
	{
		int low, high, mid;
		low = 0, high = n - 1;
		while (low <= high)
		{
			mid = (low + high) / 2;    //二分查找
			//mid = low + (high - low)*(key - array[low]) / (array[high] - array[low]);   //差值查找
			static int i = 1;
			printf("查找第 %d 次\n", i++);
			if (key < array[mid])
				high = mid - 1;
			else if (key > array[mid])
				low = mid + 1;
			else
				return mid;
		}
		return -1;
	}
	return -1;
}
void main()
{
	int array[] = { 1, 3, 5, 6, 7, 8, 9, 11, 13 };
	int key = 11;
	int sub = InterSearch(array, sizeof(array) / sizeof(int), key);
	if (sub != -1)
		printf("查找到的下标是 %d , key = %d \n", sub, key);
	else
		printf("查找失败!\n");
	system("pause");
}
运行

二分查找

bubuko.com,布布扣

差值查找

bubuko.com,布布扣

通过打开注释,分别对二分查找和差值查找进行测试。也可以查找一个不存在的关键字,实验发现,差值查找的查找次数明显少于二分查找。


专栏目录


二分查找的改进--差值查找

标签:二分查找   差值查找   查找   

原文地址:http://blog.csdn.net/zhangxiangdavaid/article/details/39439023

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!