JavaScript算法和数据结构:写一个二分查找的函数。

简介: JavaScript算法和数据结构:写一个二分查找的函数。

二分查找(Binary Search)是一种在有序数组中查找目标元素的有效算法。它通过反复将有序数组分成两半,然后确定目标元素在哪一半中,从而快速缩小搜索范围。

以下是一个简单的 JavaScript 实现二分查找的函数:

function binarySearch(arr, target) {
   
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
   
    const mid = Math.floor((left + right) / 2);

    if (arr[mid] === target) {
   
      return mid; // 目标元素找到,返回索引
    } else if (arr[mid] < target) {
   
      left = mid + 1; // 目标元素在右半部分
    } else {
   
      right = mid - 1; // 目标元素在左半部分
    }
  }

  return -1; // 目标元素不存在,返回 -1
}

// 示例
const sortedArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const targetElement = 6;
const result = binarySearch(sortedArray, targetElement);

if (result !== -1) {
   
  console.log(`元素 ${
     targetElement} 在数组中的索引为 ${
     result}`);
} else {
   
  console.log(`元素 ${
     targetElement} 不在数组中`);
}

在这个实现中,binarySearch 函数接受一个有序数组 arr 和目标元素 target 作为参数。它使用 leftright 两个指针来确定搜索范围,然后在循环中计算中间索引 mid。如果 arr[mid] 等于 target,则找到目标元素并返回索引;如果 arr[mid] 小于 target,则将搜索范围缩小到右半部分;如果 arr[mid] 大于 target,则将搜索范围缩小到左半部分。循环继续,直到找到目标元素或搜索范围为空,最终返回 -1 表示目标元素不存在。

相关文章
|
10月前
|
算法 机器人 定位技术
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
289 0
|
9月前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
308 1
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1801 58
|
10月前
|
机器学习/深度学习 算法 数据挖掘
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
349 0
|
10月前
|
算法 Python
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
350 0
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
431 19
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
646 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
382 67
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
318 32

热门文章

最新文章