什么是二分搜索?

原文链接:https://note.noxussj.top/?source=helloworld


什么是二分搜索?

二分搜索是一种比较高效的搜索算法,但前提必须是有序数组。主要步骤如下:

  1. 从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束
  2. 如果目标值大于或者小于中间元素,则在大于或者小于中间元素的那一半数组中继续二分搜索

基础案例

  • 时间复杂度:O (logn)
  • 空间复杂度:O (1)
1Array.prototype.binarySearch = function (target) { 2 let low = 0 3 let high = this.length - 1 4 5 while (low <= high) { 6 const mid = Math.floor((low + high) / 2) 7 const element = this[mid] 8 9 if (element < target) { 10 low = mid + 1 11 } else if (element > target) { 12 high = mid - 1 13 } else { 14 return mid 15 } 16 } 17 18 return -1 19} 20 21const res = [1, 2, 3, 4, 5].binarySearch(1) // 0

因为每次比较都使搜索范围缩小一半,所以时间复杂度是 O (logn)。而空间复杂度是 O (1),因为没有使用线性增长的变量。

点赞
收藏

评论区

加载中...

相关推荐

折半查找-Python版(二分查找)

介绍二分查找也称折半查找(BinarySearch),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。前提必须待查找的序列有序时间复杂度O(log2n)原理1)确定该期间的中间位置K2)将查找的值t与arrayk比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分

【数据结构与算法】—— 二分查找

1.二分查找的概念二分查找指的是在排好序的数组中,找到目标元素。如果元素存在则返回元素的下标,不存在则返回1.下面以升序为例进行简单描述2.查找过程:取数组中间元素与查找元素target比较。如果target等于中间元素则直接返回中间元素的下标,如果target小于数组中间元素则在数组左边查找,如果target大于数组中间元素则在右边查找。重复以上步骤。

java 二分查找算法

二分查找又称折半查找,它是一种效率较高的查找方法。将数列按有序(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。它可以明显减少比较次数,提高查找效率。但是,表中的数据元素必

7 二分搜索树的原理与Java源码实现

1折半查找法了解二叉查找树之前,先来看看折半查找法,也叫二分查找法在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引。如下:intarrnewint{1,3,4,6,8,9};在arr数组中查找6这个元素,查到返回对应的索引,没有找到就返回1思想很简单:1先找到数组中间元素ta

二分查找法的递归和非递归的实现

//二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回1publicstaticintbinarySearch(intdata,inte){intl0;intrdata.length1;while(l<r){

C语言自学《五》

什么是数组数组是一组数目固定、类型相同的数据项数组中的数据称为元素比如longnumbers\10\;方括号中的数字定义了要存放在数组中的元素个数,称为数组维度数组有一个类型,它组合了元素的类型和数组中的元素个数,因此如果两个数组的元素个数、类型相同,这两个数组的类型就相同可以在数组名称后的方括号内使用索引值,索引值是从0开始