二分查找
2012-08-01 15:01
295 查看
二分查找又称折半查找。
使用二分查找的前提:线性表中的记录必须是关键码有序,线性表必须采用顺序存储。
二分查找的思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;
若给定的值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定的值大于中间
记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所
有查找区域无记录,查找失败为止。
直接说思想可能有点抽象,就举个简单的例子来说明吧。比如给定一个有序数组 a[10],其值从 a[0] 到 a[9] 分别
为 0 到 9 ,比如我们要在其中查找 1,那么根据二分查找思想,先取中间值,即下标为 (0+9)/2=4的值,a[4] = 4,
显然 1 < 4,所有我们要从 4 的左半区继续查找,即从 a[0] 到 a[3] 这段区域查找,这段区域的中间值下标为 1,而
a[1] = 1,所以这样我们便找到了我们要找的值,这样返回相应的下标即可。对于给定值大于中间记录的关键字的和
上面的过程是一样的,这就不多讲了。
二分查找的代码如下:
参数说明:a为要查找的区域,n为区域的总长度,key为要查找的值
返回值:若查找成功,则返回值所在区域里的下标,若查找失败,则返回-1。(下标从0开始)
使用二分查找的前提:线性表中的记录必须是关键码有序,线性表必须采用顺序存储。
二分查找的思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;
若给定的值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定的值大于中间
记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所
有查找区域无记录,查找失败为止。
直接说思想可能有点抽象,就举个简单的例子来说明吧。比如给定一个有序数组 a[10],其值从 a[0] 到 a[9] 分别
为 0 到 9 ,比如我们要在其中查找 1,那么根据二分查找思想,先取中间值,即下标为 (0+9)/2=4的值,a[4] = 4,
显然 1 < 4,所有我们要从 4 的左半区继续查找,即从 a[0] 到 a[3] 这段区域查找,这段区域的中间值下标为 1,而
a[1] = 1,所以这样我们便找到了我们要找的值,这样返回相应的下标即可。对于给定值大于中间记录的关键字的和
上面的过程是一样的,这就不多讲了。
二分查找的代码如下:
int Binary_Search(int *a,int n,int key) { int low = 0; int high = n - 1; int middle; while (low <= high) { middle = (low + high) / 2; if (key < a[middle]) high = middle - 1; else if (key > a[middle]) low = middle + 1; else return middle; } return -1; }
参数说明:a为要查找的区域,n为区域的总长度,key为要查找的值
返回值:若查找成功,则返回值所在区域里的下标,若查找失败,则返回-1。(下标从0开始)
相关文章推荐
- Java基础---二分查找
- python编程练习---二分查找
- HDU pie (二分查找)
- 二分查找上界和下界
- 二分查找算法的递归与非递归实现
- 南阳OJ-214-最长子序列-二分查找给力啊哈哈
- 在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
- 二分查找数组交集初级版
- C++算法之 二分查找
- 数据结构--顺序查找、二分查找
- 二分查找及拓展
- 二分查找的上下界
- 查找 —— 二分查找[递归+非递归]
- 【算法基础】二分查找
- 二分查找
- lintcode-457-经典二分查找问题
- 二分查找算法递归实现
- 补充:二分查找,冒泡,选择
- LintCode-排序列表转换为二分查找树分析及实例
- java-二分查找