最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)二分查找的示例代碼

 更新時(shí)間:2023年11月23日 09:10:18   作者:CreatorRay  
二分查找也稱折半查找,它是一種效率較高的查找方法,本文主要介紹了JS實(shí)現(xiàn)二分查找的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下

最近在面試的時(shí)候被問到手寫實(shí)現(xiàn)二分查找,雖然二分查找很早就聽過,也知道實(shí)現(xiàn)原理,但是手?jǐn)]起來,總是差點(diǎn)意思,正好復(fù)習(xí)一下。作為前端程序員,可能面試絕大部分公司不需要能寫很復(fù)雜的算法問題,但是這些基本的數(shù)據(jù)結(jié)構(gòu)和常見算法,還是得能手?jǐn)]出來。

什么是二分查找

二分查找是一種在有序數(shù)組中查找目標(biāo)元素的算法,它的基本思想是每次比較數(shù)組的中間元素和目標(biāo)元素,如果相等則返回中間元素的索引,如果不相等則根據(jù)比較結(jié)果縮小查找范圍,直到找到目標(biāo)元素或者查找范圍為空。二分查找的時(shí)間復(fù)雜度是O(log n),其中n是數(shù)組的長(zhǎng)度,它比順序查找的時(shí)間復(fù)雜度O(n)要快得多。

如何實(shí)現(xiàn)二分查找

下面是用js語言實(shí)現(xiàn)二分查找的代碼示例,其中arr是有序數(shù)組,target是要查找的元素,函數(shù)返回target在arr中的索引,如果不存在則返回-1。

// 定義二分查找函數(shù)
function binarySearch(arr, target) {
  // 定義查找范圍的左右邊界
  let left = 0;
  let right = arr.length - 1;
  // 當(dāng)左邊界小于等于右邊界時(shí),繼續(xù)查找
  while (left <= right) {
    // 計(jì)算中間元素的索引
    let mid = Math.floor((left + right) / 2);
    // 如果中間元素等于目標(biāo)元素,返回索引
    if (arr[mid] === target) {
      return mid;
    }
    // 如果中間元素小于目標(biāo)元素,說明目標(biāo)元素在右半部分,將左邊界移動(dòng)到中間元素的右邊
    else if (arr[mid] < target) {
      left = mid + 1;
    }
    // 如果中間元素大于目標(biāo)元素,說明目標(biāo)元素在左半部分,將右邊界移動(dòng)到中間元素的左邊
    else {
      right = mid - 1;
    }
  }
  // 如果查找范圍為空,說明目標(biāo)元素不存在,返回-1
  return -1;
}

// 測(cè)試代碼
let arr = [1, 3, 5, 7, 9, 11, 13, 15]; // 定義一個(gè)有序數(shù)組
let target = 9; // 定義要查找的元素
let index = binarySearch(arr, target); // 調(diào)用二分查找函數(shù)
console.log(index); // 輸出結(jié)果,應(yīng)該是4

二分查找的實(shí)現(xiàn)原理

  • 首先,定義查找范圍的左右邊界,初始時(shí)為整個(gè)數(shù)組的范圍,即左邊界為0,右邊界為數(shù)組的長(zhǎng)度減1。
  • 然后,計(jì)算查找范圍的中間元素的索引,可以用左邊界加右邊界除以2的下取整來得到,例如,如果左邊界是0,右邊界是7,那么中間元素的索引是(0+7)/2=3.5,下取整是3。
  • 接著,比較中間元素和目標(biāo)元素,如果相等,說明找到了目標(biāo)元素,返回中間元素的索引;如果不相等,說明目標(biāo)元素在中間元素的左邊或者右邊,需要縮小查找范圍。
  • 如果中間元素小于目標(biāo)元素,說明目標(biāo)元素在中間元素的右邊,那么將左邊界移動(dòng)到中間元素的右邊,即左邊界等于中間元素的索引加1,右邊界不變,這樣就縮小了查找范圍的一半;如果中間元素大于目標(biāo)元素,說明目標(biāo)元素在中間元素的左邊,那么將右邊界移動(dòng)到中間元素的左邊,即右邊界等于中間元素的索引減1,左邊界不變,同樣縮小了查找范圍的一半。
  • 重復(fù)第2步到第4步,直到找到目標(biāo)元素或者查找范圍為空,如果查找范圍為空,說明目標(biāo)元素不存在,返回-1。

總結(jié)

本文介紹了二分查找的定義、時(shí)間復(fù)雜度、實(shí)現(xiàn)原理和代碼示例。

二分查找是一種在有序數(shù)組中查找目標(biāo)元素的算法,它的時(shí)間復(fù)雜度是O(log n),比順序查找的時(shí)間復(fù)雜度O(n)要快得多。

二分查找的實(shí)現(xiàn)原理是每次比較數(shù)組的中間元素和目標(biāo)元素,如果相等則返回中間元素的索引,如果不相等則根據(jù)比較結(jié)果縮小查找范圍,直到找到目標(biāo)元素或者查找范圍為空。

到此這篇關(guān)于JS實(shí)現(xiàn)二分查找的示例代碼的文章就介紹到這了,更多相關(guān)JS 二分查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript變量函數(shù)聲明提升深刻理解

    Javascript變量函數(shù)聲明提升深刻理解

    本文主要介紹了Javascript變量函數(shù)聲明提升深刻理解,Javascript變量函數(shù)聲明提升Hoisting是在Javascript中執(zhí)行上下文工作方式的一種認(rèn)識(shí),更多相關(guān)知識(shí)需要的小伙伴可以參考下面文章詳細(xì)內(nèi)容
    2022-06-06
  • 微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼

    微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼

    這篇文章主要介紹了微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼,代碼簡(jiǎn)答易懂,非常不錯(cuò),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • png在IE6 下無法透明的解決方法匯總

    png在IE6 下無法透明的解決方法匯總

    解決PNG圖片在IE6下的透明這類問題谷歌上很多解決方案,屬于非常常見的問題,以前我做的時(shí)候,這類透明我都是用gif,而直接避開png,所以到現(xiàn)在我并沒有去了解過這個(gè)問題。今天就把這個(gè)問題整理下,解決方案匯總給大家。
    2015-05-05
  • 微信小程序?qū)崿F(xiàn)留言板(Storage)

    微信小程序?qū)崿F(xiàn)留言板(Storage)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)留言板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript

    用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript

    用函數(shù)式編程技術(shù)編寫優(yōu)美的 JavaScript...
    2006-11-11
  • 在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用

    在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用

    這篇文章主要介紹了在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用,本文記錄一下在?TypeScript?項(xiàng)目里封裝?axios?的過程,之前在開發(fā)?StarBlog-Admin?的時(shí)候已經(jīng)做了一次封裝,不過那時(shí)是JavaScript跟TypeScript還是有些區(qū)別的,需要的朋友可以參考下
    2024-01-01
  • js實(shí)現(xiàn)addClass,removeClass,hasClass的函數(shù)代碼

    js實(shí)現(xiàn)addClass,removeClass,hasClass的函數(shù)代碼

    js實(shí)現(xiàn)addClass,removeClass,hasClass的函數(shù)代碼,需要的朋友可以參考下。
    2011-07-07
  • Worker加載JS腳本跨域問題的幾種解決方法

    Worker加載JS腳本跨域問題的幾種解決方法

    Web Worker 是一種在后臺(tái)線程中運(yùn)行的 JavaScript 腳本,允許我們?cè)诓蛔枞骶€程的情況下執(zhí)行復(fù)雜計(jì)算或處理,Worker 加載的 JS 腳本如果存在跨域問題,可能導(dǎo)致腳本無法正常加載和執(zhí)行,以下是解決 Worker 加載 JS 腳本跨域問題的幾種方法,需要的朋友可以參考下
    2025-02-02
  • 在IE8上JS實(shí)現(xiàn)combobox支持拼音檢索功能

    在IE8上JS實(shí)現(xiàn)combobox支持拼音檢索功能

    這篇文章主要介紹了在IE8上JS實(shí)現(xiàn)combobox支持拼音檢索功能的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • JS返回iframe中frameBorder屬性值的方法

    JS返回iframe中frameBorder屬性值的方法

    這篇文章主要介紹了JS返回iframe中frameBorder屬性值的方法,分析了frameBorder屬性的功能及javascript獲取frameBorder屬性值的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

福泉市| 横峰县| 包头市| 延长县| 西城区| 灌云县| 栾城县| 柘荣县| 中山市| 石嘴山市| 松溪县| 灵武市| 响水县| 阳城县| 苏尼特左旗| 余江县| 扶沟县| 阳山县| 冷水江市| 元谋县| 云霄县| 巴里| 依兰县| 当涂县| 江山市| 聂拉木县| 西平县| 格尔木市| 驻马店市| 麻城市| 定边县| 肥东县| 乐昌市| 保定市| 吐鲁番市| 汉中市| 仪征市| 长岭县| 乌兰县| 昭平县| 长宁区|