二進制搜索 Javascript

| | | | | | |

如何在 JavaScript 中編寫二進制搜索

搜索算法極大地方便了程序員的生活。這使得在包含數十、數百或數千個項目的數據集中查找特定項目變得更加容易。

最流行的搜索形式之一是二分搜索。此搜索快速找到數組中的元素。每次搜索檢查一個項目時,它都會將要查找的項目數量減半。

在本指南中,我們將討論什麼是二分搜索以及它們是如何工作的。接下來,我們將繼續使用兩種不同的方法實現二分搜索:迭代和遞歸。

讓我們在 !

什麼是二分搜索?

二分搜索是一種在有序數組中搜索元素的計算機算法。

從數組的中間開始,檢查中間元素是否小於、等於或大於您要查找的數字。

如果數字更小,則算法知道如何繼續查看數組的左半部分,較小的數字在哪裡;如果數字更大,算法將專注於數組的右半部分。二進制搜索僅適用於有序列表。

二進制搜索比線性搜索更有效。事實上,每進行一次搜索,列表中剩餘的待查找項數就會減少一半。

如何使用二分搜索

一旦你學會了二分搜索,它就很容易理解。

在實施二分搜索算法之前,讓我們回顧一下 - 邁出一步。我們將在列表中找到數字“9”。讓我們從一個有序列表開始:

2 6 < /td> 8 9 10

首先,我們需要找到中間的數字並將其分配給一個變量。這是通過計算第一個和最後一個數字的總和並除以二來找到的。我們稱之為“中心”變量:

Start
中等
結束
2 6 8 9 10

8 是我們的平均數。因此,我們可以將中心數字與我們正在尋找的數字進行比較。如果中心數字與我們要查找的數字相同,我們的搜索可能會停止。

在這個例子中,8 不等於 9。我們的搜索繼續。

所以我們要比較中間的數字是否大於9。不是。

這告訴我們,我們要找的數字必須在中心之後數字。9 在有序列表中大於 8。將我們的起始數字設置為等於中心數字。這是因為我們知道我們要查找的數字不會在中心數字之前。

如果我們要找的數字比較baby,我們會設置最終的數字等於中間的數字,由於這個數字小於中間的數字,我們可以把我們的搜索重點放在列表的下半部分。

二分查找在列表的上半部分再次重複,因為 9 大於 8:

< td> 中等


開始 結束
2 6 8 < /td> 9 10

讓我們找到中心數。那是 9。我們可以將 9 與我們正在尋找的數字進行比較。 9 等於我們正在尋找的數字。

這意味著我們的研究可以停止。我們設法在列表中找到了第 9 位!

如何在 JavaScript 中實現二進制搜索

可以使用迭代或遞歸方法實現二進制搜索。

迭代二分搜索

迭代二分搜索使用while循環來查找列表中的項目。此循環將一直運行,直到在列表中找到該項目或直到搜索到列表。

讓我們從編寫 function 執行我們的二分搜索:

讓我們從定義兩個變量開始:開始和結束。這些跟踪最高和最低值,我們的研究正在使用。我們使用 while 循環 ,它一直運行到起始編號大於結束編號。此循環計算列表開頭和結尾之間的中間數。

如果我們要找的數字等於中間的數字,則將中間的數字返回給我們的主程序。數字較小,種子值設置為等於中間數字加 1。這些比較是使用 if 語句進行的。

否則,最後的數字設置為中間數字減一。如果執行while循環後沒有找到我們的數字,則返回-1。我們稱之為基本條件。在我們的主程序中,我們`將檢查返回的數字是否等於-1。是,這意味著我們的數字沒有找到。

我們的函數還沒有工作。我們需要編寫一個主程序來命名它:

我們已經定義了一個要搜索的數字列表以及我們想要在列表中找到的數字。接下來,我們調用了 binarySearch 函數。這將做我們的研究。搜索將返回 -1 或我們正在尋找的元素的位置。

-1 表示找不到項目。如果未找到元素,則執行 else 語句的內容。否則,執行 if 語句的內容。

讓我們運行我們的代碼:

這說明我們的搜索成功了!

遞歸二分搜索

h3>

遞歸二分搜索被認為比迭代搜索更優雅。這是因為二進制搜索在列表上一遍又一遍地執行相同的操作。此行為可以使用遞歸算法實現。

打開一個新的 JavaScript 文件並粘貼以下代碼:

這段代碼與我們的第一次搜索進行相同的比較。檢查中間數字是否等於、大於或小於我們要查找的數字。

在我們的 函數,我們使用了if語句來檢查起始編號是否大於結束編號,如果是,則說明在我們指定的列表中沒有找到我們的item。在這種情況下,我們將 -1 返回給主程序。

如果我們要查找的號碼與中心號碼相同,則將中心號碼返回給主程序。如果我們正在尋找的數字大於或小於中心數字,我們的二分搜索功能將再次執行。這將一直持續到找到我們的元素。

要執行此功能,我們需要對我們的主程序進行修改:

我們還需要傳遞兩個參數:“start”和“end”的值‚Äã‚Äã。 “start”的值等於0。“end”的值等於列表的長度減一。

讓我們運行我們的代碼,看看會發生什麼:

我們的二分查找成功了!它使用與迭代方法相同的底層算法。不同之處在於,二分搜索是使用調用的函數執行的,直到找到該項目或直到列表中的搜索完成,以先到者為準。

結論

二分搜索使查找列表中的項目變得更加容易。每次執行搜索時,列表中剩餘的待查找項數會減少一半。這使得二分搜索比線性搜索更有效。

您現在可以開始像專家一樣在 JavaScript 中實現二分查找!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method