首页 > 代码库 > 二分查找的改进--差值查找
二分查找的改进--差值查找
差值查找
在二分查找中,我们每次比较都可以排除一半的数据量,这个已经是很高效了。如果利用关键字本身的信息,每次排除的数据量充分依赖于关键字的大小,则查找会更高效,这就是差值查找的思想。
下面通过示例代码,比较二分查找和差值查找的不同,在不同中领略差值查找的改良之处。
#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"); }运行
二分查找
差值查找
通过打开注释,分别对二分查找和差值查找进行测试。也可以查找一个不存在的关键字,实验发现,差值查找的查找次数明显少于二分查找。
专栏目录
- 数据结构与算法
- c指针
二分查找的改进--差值查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。