二分查找
来源:互联网 发布:淘宝店铺投诉怎么投诉 编辑:程序博客网 时间:2024/05/21 17:35
二分查找算法:是一种在有序数组中查找某一特定元素的搜索算法。
二分查找思想:搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。
二分查找算法要求:1>必须采用顺序存储结构;2>必须按关键字大小有序排列。
其流程图如下:(来自于百度百科)
算法实现:
#include <iostream>using namespace std;//二分查找: 递归实现int binarySearch(int a[],int low,int high,int key){int mid=low+(high-low)/2;if(low>high)return -1;else{if(a[mid]==key)return mid;else if(a[mid]>key)return binarySearch(a,low,mid-1,key);elsereturn binarySearch(a,mid+1,high,key);}}//二分查找:非递归方法实现int binarySearch(int a[],int n,int key){int low=0,high=n-1;int mid;while(low<=high){mid=(low+high)/2;if(key==a[mid])return mid;else if(key<a[mid])high=mid-1;elselow=mid+1;}return -1;}int main(){int a[8]={1,3,4,5,6,7,9,10};int index=0;//index=binarySerach(a,0,8,3);index=binarySearch(a,8,3);cout<<"下表索引:"<<index<<endl<<"输出要查找的值:"<<a[index]<<endl;return 0;}输出结果
二分查找应用:
二分查找法找寻边界值
二分查找法统计元素出现的个数
leetcode:数组之Search in Rotated Sorted Array
二分查找的优点:二分查找法的O(log n)让它成为十分高效的算法,是比较次数少,查找速度快,平均性能好
二分查找法的缺陷:
数组必须有序,我们很难保证我们的数组都是有序的。当然可以在构建数组的时候进行排序,可是又落到了第二个瓶颈上:它必须是数组。
数组读取效率是O(1),可是它的插入和删除某个元素的效率却是O(n)。因而导致构建有序数组变成低效的事情。
解决这些缺陷问题更好的方法:使用二叉查找树,最好自然是自平衡二叉查找树了,自能高效的(O(n log n))构建有序元素集合,又能如同二分查找法一样快速(O(log n))的搜寻目标数。
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 像翻书一样,翻过每一张超级表格
- JVM垃圾回收机制
- mtu设置--解决部分网站打不开的问题
- 资源二:计算机视觉,机器学习方面牛人网站链接
- TextView使用Spannable设置复合文本
- 二分查找
- java 获取线程状态 判断线程是否已启动(未测试)
- Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JN
- 装载问题(2) --课本实现
- 好用的网址
- Java NIO学习笔记之二-图解ByteBuffer
- 机器学习的特征工程
- http://blog.csdn.net/jijiji000111/article/details/47971879
- Java RMI远程方法调用详解