二分查找/二分搜索(binary_search)详解
2013-01-21 14:27
459 查看
前提:
1.不考虑超大数据情况。
2.对于二分查找/搜索,要求待查表为有序表。
代码:
1.递归方式:
2.非递归方式:
算法分析:
1.时间复杂度:
从二分查找的过程来看,每次比较目标值和当前序列中间元素的值后,都会将当前序列一分为二,继续在分好的序列中查找。序列的变化其实就是一个二叉树的结构。在每一层上面,执行的比较操作都相同,消费时间设为C。 对于一个二叉树,深度为lgn+1。所以时间总量为:T(n)=Clgn+C。
时间复杂度为:O(lgn)
2.用法解析:
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
1.不考虑超大数据情况。
2.对于二分查找/搜索,要求待查表为有序表。
代码:
1.递归方式:
#include<iostream> using namespace std; int binary_search(int a[],int h,int t,int value); int main() { int a[11]={0,1,2,3,4,5,6,7,8,9,10}; int len=sizeof(a)/sizeof(a[0]); int result = binary_search(a,0,len-1,10); cout<<result<<endl; } int binary_search(int a[],int h,int t,int value) { if(h>t) { return -1; } int mid=(h+t)/2; if(value<a[mid]){ binary_search(a,h,mid-1,value); }else if(value>a[mid]){ binary_search(a,mid+1,t,value); }else{ return mid; } }
2.非递归方式:
#include<iostream> using namespace std; int search_binary(int a[],int low,int high,int value); int main() { int a[11]={0,1,2,3,4,5,6,7,8,9,10}; int len=sizeof(a)/sizeof(a[0]); int result=search_binary(a,0,len-1,2); cout<<result<<endl; } int search_binary(int a[],int low,int high,int value) { int middle=0; while(low<high) { middle=(low+high)/2; if(value>a[middle]) { low=middle+1; }else if(value<a[middle]){ high=middle-1; }else{ return middle; } } return -1; }
算法分析:
1.时间复杂度:
从二分查找的过程来看,每次比较目标值和当前序列中间元素的值后,都会将当前序列一分为二,继续在分好的序列中查找。序列的变化其实就是一个二叉树的结构。在每一层上面,执行的比较操作都相同,消费时间设为C。 对于一个二叉树,深度为lgn+1。所以时间总量为:T(n)=Clgn+C。
时间复杂度为:O(lgn)
2.用法解析:
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
相关文章推荐
- STL之二分查找 (Binary search in STL)
- STL之二分查找 (Binary search in STL)
- Find Mode in Binary Search Tree:带重复元素的搜索二叉树Morris遍历查找频率最大的元素
- leetcode 74. Search a 2D Matrix-矩阵搜索|二分查找
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- LeetCode-Search in Rotated Sorted Array II-在旋转数组中搜索-二分查找
- STL中的二分查找算法(binary_search lower_bound upper_bound equal_range)
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
- (转)STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- 二分查找与STL中的lower_bound(),upper_bound(),binary_search()
- STL之二分查找 (Binary search in STL)
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- 二分搜索树排序binary search sorting的c++实现
- STL中的二分查找--lower_bound/upper_bound/binary_search
- LintCode Binary Search 二分查找
- binary_search()、upper_bound()、lower_bound() 二分查找
- STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
- 【 STL之二分查找 (Binary search in STL)】