数据结构基础之折半查找与插值查找
来源:互联网 发布:淘宝怎么评论售后服务 编辑:程序博客网 时间:2024/06/09 16:24
折半查找(Binary Search)技术,又称为二分查找。它的前提是线性表中的记录必须是关键码有序(通常是从小到大有序),线性表必须采用顺序存储。折半查找的基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。
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;}
折半查找的时间复杂度为O(logn).
插值查找(Interpolation Search)是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值计算公式:
稍微对折半查找的代码进行一些修改:
int InterpolationSearch(int *a, int n, int key){ int low, high, mid; low = 1;//定义最低下标为记录首位 high = n;//定义最高下标为记录末位 while (low <= high) { mid = low + (high - low)*(key - a[low]) / (a[high] - a[low]);//核心 if (key < a[mid])//若查找值比中值小 high = mid - 1;//最高下标调整到中位下标小一位 else if (key>a[mid]) low = mid + 1; else return mid; } return 0;}
从时间复杂度上来说,它也是O(logn),但是对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好得多。可是对于数组分布极端不均匀的数据,用插值查找就不是很合适。
0 0
- 数据结构基础之折半查找与插值查找
- 数据结构之查找——折半查找、插值查找、斐波那契查找
- 折半查找&&插值查找
- 数据结构之折半查找
- 数据结构之折半查找
- 简单查找算法之折半查找、插值查找、斐波那契查找
- 数据结构之折半查找表
- 大话数据结构之:折半查找
- 数据结构与算法-查找-折半查找
- 【数据结构与算法】【查找】插值查找的代码实现
- 数据结构查找算法之折半查找
- 数据结构之线性查找和折半查找
- 基础算法之五-查找: 折半查找
- 数据结构-- 向量--插值查找
- 静态查找(顺序查找,折半查找,插值查找,斐波那契查找)
- 查找之折半查找
- 查找之折半查找
- 查找之折半查找
- 设计模式补充
- dubbo后台编译及部署
- Android性能优化之Activity 泄漏
- 创建系统日历的日历事件
- 论C和C++中main函数的重要性
- 数据结构基础之折半查找与插值查找
- 虚拟机登录fedora10桌面系统时报错:No space left on device
- Css3 API
- Linux 无线驱动接口 wext 和 nl80211
- 欢迎使用CSDN-markdown编辑器
- Apple pay 论述
- 爬虫攻略
- [神经网络]2.1-How the backpropagation algorithm works-Warm up: a fast matrix-based approach ...(翻译)
- 从零开始使用C ++和OpenGL编写游戏引擎