首页 > 编程语言 >js 实现二分搜索算法

js 实现二分搜索算法

时间:2024-07-13 20:52:47浏览次数:16  
标签:二分 arr 数组 搜索算法 js let 有序

二分算法搜索数字

二分搜索算法是一种在有序数组中查找目标值的高效方法。其时间复杂度为 (O(\log n))。下面是用 JavaScript 实现的二分搜索算法:

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

    while (left <= right) {
        let 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; // 未找到目标值
}

// 示例使用
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const target = 7;
const result = binarySearch(array, target);

if (result !== -1) {
    console.log(`目标值 ${target} 在数组中的索引为: ${result}`);
} else {
    console.log(`目标值 ${target} 不在数组中`);
}

这个函数 binarySearch 接受一个有序数组 arr 和一个目标值 target,如果找到目标值,返回其在数组中的索引,否则返回 -1。示例代码演示了如何使用这个函数进行二分搜索。

二分算法搜索字母

是的,二分搜索算法不仅可以用于查找数字,还可以用于查找字符或字符串,只要数组是有序的。以下是一个用 JavaScript 实现的在有序字符数组中查找目标字符的二分搜索算法:

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

    while (left <= right) {
        let 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; // 未找到目标值
}

// 示例使用
const array = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const target = 'd';
const result = binarySearch(array, target);

if (result !== -1) {
    console.log(`目标字符 ${target} 在数组中的索引为: ${result}`);
} else {
    console.log(`目标字符 ${target} 不在数组中`);
}

这个函数 binarySearch 处理字符数组和数字数组的方式相同,因为在 JavaScript 中,字符可以通过比较运算符(例如 <===)进行比较。确保数组是有序的,这样二分搜索才能正常工作。

总结

二分搜索算法要求数组是有序的。对于字符串数组,这种顺序通常是字母顺序(字典顺序)。这是因为二分搜索依赖于数组的有序性来有效地减少搜索范围。

有序数组的排序可以是数字或字母,甚至是更复杂的对象,只要有一种可以比较元素大小的排序规则。对于字符串,排序通常基于字典顺序,即按字母顺序排列。

标签:二分,arr,数组,搜索算法,js,let,有序
From: https://www.cnblogs.com/jocongmin/p/18300704

相关文章

  • js 实现冒泡排序算法
    冒泡排序是一种简单的排序算法。它重复地遍历待排序的列表,比较相邻的元素并交换位置,如果它们的顺序错误。这个过程会重复进行,直到整个列表排序完成。下面是用JavaScript实现的冒泡排序算法:functionbubbleSort(arr){letn=arr.length;letswapped;do{......
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源
          博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经......
  • Node.js安装与配置
    Node.js的安装与配置[Node.js官网]20.15.1版本下载链接zip包下载设置全局安装文件夹npmconfigsetprefix"F:\dev\env\node\node_global"设置全局缓存文件夹npmconfigsetcache"F:\dev\env\node\node_cache"安装cnpm到本地npminstall-gcnpm--registry=https:/......
  • 【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现
    前言什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:基本数据类型(6种)String、Number、Object、Boolean、null、undefined、symbol(ES6+)引用数据类型Object(function、Array、正则表达式等皆......
  • package.json 脚本配置使用环境文件
    脚本使用环境文件"scripts":{"dev":"vite","build:prod":"vitebuild","build:stage":"vitebuild--modestaging","preview":"vitepreview"}dev:运行开发服务器,默认使用.......
  • [JS] generator基本使用
    next方法与yield关键字generator函数可以返回一个迭代器,通过next方法切换generator的状态。generator函数被调用时并不会执行内部的语句,而是返回一个迭代器对象。迭代器对象首次调用next方法,才开始执行generator函数的语句。直到遇到yield语句,内部的执行中断,返回yield关键字右......
  • 解决HBuilder X运行微信小程序模拟器Error: pages.json解析失败
    前言如果已经排查很久了,那这就不是你的问题了,大概率是由于你曾经创建了一个路径,在指定PagePath的时候又指向了这个路径,这个操作本身没有问题。但是,如果你曾经对这个路径修改过了,那编译器就会有问题,来品鉴一下这个错误。16:15:36.772请注意运行模式下,因日志输出、sourcem......
  • nodejs微信支付安全证书下载,亲测有效
    微信支付是目前非常流行的支付方式之一,很多开发者在集成微信支付时需要下载并使用微信支付的安全证书。本文将详细介绍如何在Node.js环境中下载微信支付安全证书,并提供一个亲测有效的示例代码。前置条件在开始之前,请确保你已经具备以下条件:已注册微信支付商户,并获得商户号和AP......
  • js 树形数组转一维数组,或一维数组转树形数组
    树形数组转一维数组要将一棵树结构(包含children属性)拍平为一个一维数组,可以使用递归或迭代的方法。下面是两种常见的实现方式:1.使用递归functionflattenTree(tree){letresult=[];tree.forEach(node=>{result.push(node);if(node.children){......
  • 基于ssm+vue.js+uniapp的汽车养护管理系统附带文章和源代码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......