阿凡卢 发表于 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> target)      return binary_search(array, low, mid -1, target);    if (array< target)      return binary_search(array, mid+1, high, target);    return mid;}
页: [1]
查看完整版本: 二分搜索及其扩展