折半查找&&插值查找
来源:互联网 发布:饥荒手机版mt修改数据 编辑:程序博客网 时间:2024/05/22 17:30
折半查找技术,又称为二分查找。它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找,若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
int binarySearch(int *a, int n, int key){ int low,high,mid; low = 1; high = n; while(low <= high) { mid = (low + high) / 2; if (key < a[mid]) { high = mid -1; } else if (key > a[mid]) { low = mid + 1; } else return mid; } return 0;}
折半查找经过改进之后,可以得到另外一种有序查找算法,插值查找法。插值查找是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式(key - a[low]) / (a[high] - a[low]);
本来mid = (low + high) / 2 = low + (high - low) / 2 ,现在就把1/2替换成了上面的计算公式,但如果数据是极端不均匀的数据,用插值查找未必是很适合的选择。
int binarySearch(int *a, int n, int key){ int low,high,mid; low = 1; high = n; while(low <= high) { mid = low + (high - low) * (key - a[low]) / (2 * a[high] - a[low]); if (key < a[mid]) { high = mid -1; } else if (key > a[mid]) { low = mid + 1; } else return mid; } return 0;}
0 0
- 折半查找&&插值查找
- 数据结构基础之折半查找与插值查找
- 静态查找(顺序查找,折半查找,插值查找,斐波那契查找)
- 简单查找算法之折半查找、插值查找、斐波那契查找
- 数据结构之查找——折半查找、插值查找、斐波那契查找
- 查找-插值查找
- 查找--插值查找
- 查找-插值查找
- 折半查找、插值查找和斐波那契查找
- 折半查找、插值查找以及斐波那契查找
- 二分查找 插值查找
- 插值查找(按比例查找)
- 插值查找
- 插值查找算法
- 插值查找算法
- 插值查找算法
- 插值查找算法
- 插值查找详解
- Android中Intent和Intent过滤器详解
- DEVICE_ATTR的实例分析
- maven的pom介绍及配置(四)
- OGG学习笔记02-单向复制配置实例
- 顺时针打印矩阵
- 折半查找&&插值查找
- linux相关介绍
- 激光数据处理(一)
- 浅谈生命周期
- protocol buffer使用中的问题This is supposed to be overridden by subclasses
- thinkphp5 模型多次save操作,会产生重复的主键ID
- 配置宏控
- resultMap 1对多查询
- hdu 1028 Ignatius and the Princess III