六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 185|回复: 0

二分搜索及其扩展

[复制链接]

升级  67.2%

274

主题

274

主题

274

主题

进士

Rank: 4

积分
836
 楼主| 发表于 2012-12-13 21:21:19 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">二分搜索
折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
时间复杂度:二分搜索每次把搜索区域减少一半,很明显时间复杂度为O(logN)。
空间复杂度:O(1),虽以递归形式定义,但是尾递归,可改写为循环。
二分搜索的基本实现
二分查找法在算法家族大类中属于“分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下:
<div class="cnblogs_code">int binary_search(int array[], int low, int high, int target){    if (low > high) return -1;        int mid = (low + high)/2;    if (array[mid]> target)        return binary_search(array, low, mid -1, target);    if (array[mid]< target)        return binary_search(array, mid+1, high, target);    return mid;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表