算法工程师必备知识-查找相关内容及总结
- 各种查找时间复杂度:顺序查找为O(n),分块查找为O(log_2 n)到O(n),二分查找为O(log_2 n),哈希查找为o(l)
- 分块查找属于静态查找,动态查找有二叉排序树查找,最优二叉树查找,哈希表查找等。
二分查找
1.使用二分查找(折半查找)长度为n的线性表时,每个元素的平均查找长度是log_2 n:这里的平均查找长度可以考虑while循环的次数。二分查找和二叉搜索树查找的时间性能在最坏情况下是不同的,因为二分查找最坏的情况下查找log_2 n +1次,而二元查找树最坏需要查找n次,对应树只有左孩子或者只有右孩子。
2.二分查找算法的C++实现代码
方法分为两类:循环和递归。递归算法比较简洁但是会利用堆栈保存函数和数据,而且当数据较大时还可能造成溢出,因为能用循环的尽量的用循环来实现,下面分别介绍两种方法的实现代码
/*递归方法实现二分查找C++*/
int Binary_find (int array[], int low, int high,int target) //target 为要查找的值
{ if(low>high)
return -1; //未查找到值
int mid=low+((high-low)>>1);//low+(high-low)/2利用移位运算符代替除以2,效率更高,二分查找为向下取整
if (array[mid]>target)
{ high=mid-1;