当前位置:网站首页>二分法查找
二分法查找
2022-07-17 00:06:00 【别Null.了】
目录
二分法查找
介绍二分法查找
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。
时间复杂度:
最坏情况查找结果为最后一个元素(或者第一个元素)T(n)=T(n/2)+O(1)所以T(n)=O(log2n)
最好情况O(1)所要查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)
空间复杂度 S(n)=logn
二分法的查找思路
1、首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
2、如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤一的操作,进行递归查找。
3、如果某一步数组为空,则表示找不到目标元素。
二分法有关示例
解题思路
例如,在有序数据 [26,30,45,55,60,61,62,65,70,78,99] 中查找 55 的过程

代码实现
需要注意的是:在使用二分法之前要将数组进行排序,二分法针对的是有序数组。
非递归算法
function binarySearch(arr,key){
var low=0; //数组最小索引值
var high=arr.length-1; //数组最大索引值
while(low<=high){
var mid=Math.floor((low+high)/2);
if(key==arr[mid]){
return mid;
}else if(key>arr[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
return -1; //low>high的情况,这种情况下key的值大于arr中最大的元素值或者key的值小于arr中最小的元素值
}
实现结果

递归算法
function binarySearch(arr,low,high,key){
if(low>high){
return -1;
}
var mid=Math.floor((low+high)/2);
if(key==arr[mid]){
return mid;
}else if(key<arr[mid]){
high=mid-1;
return binarySearch(arr,low,high,key);
}else{
low=mid+1;
return binarySearch(arr,low,high,key);
} 实现结果

边栏推荐
猜你喜欢

Use leaflet to copy the original shentiwa Mega map to make a diary

ModelArts-人声检测and文本分类

object-fit:cover;在小程序中不起作用,小程序图片变形了如何处理

uni-app微信小程序——商城(3)——商城主页

Summary of XML external entity injection (xxE target recurrence)

MoveIt2——4.机器人模型和机器人状态

tp-watermark.js网页添加水印插件

Assemblage stylisé de cartes de commutation auto - encapsulées
![Understand PHP from [Fifth space 2021] easycleanup_ session](/img/fc/95332d488dd6096f3a3f6a9fb11644.png)
Understand PHP from [Fifth space 2021] easycleanup_ session

Codeforces round #664C
随机推荐
sql语句学习和pymysql的使用
(10)文件包含
From catf1ag two-hour AK match pwn/attack killing, summarize the common command guide of emergency response
【专题】用ST表解决RMQ刷题总结
PCRE bypasses regular
mock平台的使用说明
Oracle database startup and shutdown steps
“我的”Bug大全(转载)
Maker-鸿蒙应用开发培训笔记03
Record once easy_ SQL Stack Injection
Day13 mixed view base class
Moveit2——1.开始
js字符串转对象 js对象转字符串 js字符串与对象互转
智能指针(shared_ptr、unique_ptr、weak_ptr)
量化行业知识汇总
今天的码农女孩做了关于生命周期的笔记以及动态时钟的练习
Initial flask
列表懒加载和图片懒加载
Codeforces round #664C
深度之眼三——(3)】 数学:矩阵特征值与特征向量1