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 表示目标元素不存在。

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
12天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
25 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
11天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
16天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
25天前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
29天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
27天前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
1月前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
33 7
|
1月前
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
47 4
|
1月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法

热门文章

最新文章