[數組查找]2.圖解二分查找及其代碼實現

二分查找
二分查找也是一種在數組中查找數據的算法。和線性查找不同,它只能查找已經排好序的數據。二分查找通過比較數組中間的數據與目標數據的大小,可以得知目標數據是在數組的左邊還是右邊。因此,比較一次就可以把查找范圍縮小一半。重復執行該操作就可以找到目標數據,或得出目標數據不存在的結論。

步驟:
01還是來試試查找數字6

02?首先找到數組中間的數字,此處為5。

03??將5和要查找的數字6進行比較。

04?把不需要的數字移出查找范圍。

05??在剩下的數組中找到中間的數字,此處為7。

06?比較7和6。

07?把不需要的數字移出查找范圍。

08?在剩下的數組中找到中間的數字,此處為6。

解說
二分查找利用已排好序的數組,每一次查找都可以將查找范圍減半。查找范圍內只剩一個數據時查找結束。
數據量為n的數組,將其長度減半log2n次后,其中便只剩一個數據了。也就是說,在二分查找中重復執行“將目標數據和數組中間的數據進行比較后將查找范圍減半”的操作log2n次后,就能找到目標數據(若沒找到則可以得出數據不存在的結論),因此它的時間復雜度為O(logn)。
補充說明
二分查找的時間復雜度為O(logn),與線性查找的O(n)相比速度上得到了指數倍提高(x=log2n,則n=2x)。
但是,二分查找必須建立在數據已經排好序的基礎上才能使用,因此添加數據時必須加到合適的位置,這就需要額外耗費維護數組的時間。
而使用線性查找時,數組中的數據可以是無序的,因此添加數據時也無須顧慮位置,直接把它加在末尾即可,不需要耗費時間。
綜上,具體使用哪種查找方法,可以根據查找和添加兩個操作哪個更為頻繁來決定。4

代碼演示:

def binary_search(arr, target):left, right = 0, len(arr) - 1while left <= right:mid = (left + right) // 2if arr[mid] == target:return mid  # 如果找到目標元素,返回元素的索引elif arr[mid] < target:left = mid + 1else:right = mid - 1return -1  # 如果數組中不存在目標元素,返回 -1# 測試二分查找算法
arr = [1, 2, 3, 6, 8, 9]
target = 8result = binary_search(arr, target)if result != -1:print(f"目標元素 {target} 在數組中的索引為 {result}")
else:print(f"目標元素 {target} 不存在于數組中")

結果:

目標元素 6 在數組中的索引為 5

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16542.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式進階——舵機控制PWM

&#x1f3ac; 秋野醬&#xff1a;《個人主頁》 &#x1f525; 個人專欄:《Java專欄》《Python專欄》 ??心若有所向往,何懼道阻且長 文章目錄 舵機信號線代碼示例初始化PWM初始化UART打印日志初始化外部中斷Extimain函數 舵機最早用于船舶上實現轉向功能,由于可以通過程序連…

MySQL中, 自增主鍵和UUID作為主鍵有什么區別?

首先我們來看看, 存儲自增主鍵和uuid的數據類型 我們知道, mysql中作為主鍵的通常是int類型的數據, 這個 數據從第一條記錄開始, 從1開始主鍵往后遞增, 例如我有100條數據, 那么根據主鍵排序后, 里面的記錄從上往下一次就是1, 2, 3 ... 100, 但是UUID就不一樣了, UUID是根據特殊…

打卡信奧刷題(21)用Scratch圖形化工具信奧P7071 [CSP-J2020] 優秀的拆分

使用2進制進行拆分是比較好的解決方案&#xff0c;畢竟對于大家來說二進制轉換是非常熟的&#xff0c;如果不會可以參考打卡信奧刷題&#xff08;19&#xff09;用Scratch圖形化工具信奧B3972 [語言月賽 202405] 二進制 題解 &#xff0c;輸出的時候再轉換一下輸出&#xff0c;…

M功能-支付平臺(三)

target&#xff1a;離開柬埔寨倒計時-221day 前言 今天周六&#xff0c;但是在柬埔寨還是工作日&#xff0c;想著國內的朋友開始休周末就羨慕呀&#xff0c;記不清在這邊過了多少個周六了&#xff0c;多到我已經習慣了。而且今天技術部還停電了&#xff0c;真的是熱的受不了呀…

c++11:智能指針的種類以及使用場景

指針管理困境 內存釋放&#xff0c;指針沒有置空&#xff1b;內存泄漏&#xff1b;資源重復釋放 怎樣解決&#xff1f; RAII 智能指針種類 shared_ptr 實現原理&#xff1a;多個指針指向同一資源&#xff0c;引用計數清零&#xff0c;再調用析構函數釋放內存。 使用場景…

ASP.NET 代碼審計

ASP.NET 官方文檔 名詞解釋 IIS&#xff08;Internet Information Services&#xff09; IIS 是微軟開發的一款 Web 服務器軟件&#xff0c;用于在 Windows 服務器上托管和提供Web應用程序和服務。它支持 HTTP、HTTPS、FTP、SMTP 等多種協議&#xff0c;主要用于&#xff1a…

基于混合Transformer-CNN模型的多分辨率學習方法的解剖學標志檢測

文章目錄 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model摘要方法實驗結果 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model 摘要 精確定位…

跨域計算芯片,一把被忽視的汽車降本尖刀

作者 |王博 編輯 |德新 2019年前后&#xff0c;「中央運算單元區域控制」的架構被提出。基于這一趨勢&#xff0c;從板級的多芯片&#xff0c;到板級的單芯片&#xff0c;集成度越來越高&#xff0c;跨域計算芯片隨之來到聚光燈下。 跨域計算芯片的特點是&#xff0c;與專為智…

Django 里傳參給html文件

第一步&#xff1a;在 urls.py 文件里修改 from django.contrib import admin from django.urls import path from app01 import views # 添加這一行urlpatterns [#path(admin/, admin.site.urls),path(index/, views.index), # 添加這一行 ]第二步&#xff1a;在 settings…

若依框架的配置文件詳解:從數據庫配置到高級定制

若依框架&#xff08;RuoYi&#xff09;作為一個基于Spring Boot和MyBatis的快速開發平臺&#xff0c;提供了豐富的配置選項&#xff0c;讓開發者能夠靈活地調整和擴展其功能。配置文件在若依框架中扮演著至關重要的角色&#xff0c;通過合理配置&#xff0c;可以實現對數據庫連…

牛客網刷題 | BC97 回文對稱數

目前主要分為三個專欄&#xff0c;后續還會添加&#xff1a; 專欄如下&#xff1a; C語言刷題解析 C語言系列文章 我的成長經歷 感謝閱讀&#xff01; 初來乍到&#xff0c;如有錯誤請指出&#xff0c;感謝&#xff01; 描述 今天牛牛學到了回文…

鎖相環的一些學習筆記--(1)

下圖兩組1.2.3可以對應起來&#xff1b; 一些分析&#xff1a; 1.根據這個可知最后vco_voltage停在0.5v 參考資料&#xff1a; 1. Matlab https://www.bilibili.com/video/BV1bR4y1Z7Xg/?spm_id_from333.1296.top_right_bar_window_history.content.click&vd_source555…

Redis RDB 持久化問題

前言 Redis 是內存數據庫&#xff0c;它將自己的數據儲存在內存里面&#xff0c;如果不想辦法將儲存在內存中的數據保存到磁盤里面&#xff0c;那么一旦服務器進程退出&#xff0c;服務器中的數據也就沒了。 因此&#xff0c;Redis 提供了 RDB 持久化功能&#xff0c;這個功能…

如何將Windows PC變成Wi-Fi熱點?這里提供詳細步驟

序言 Windows 10和Windows 11都有內置功能,可以將你的筆記本電腦(或臺式機)變成無線熱點,允許其他設備連接到它并共享你的互聯網連接。以下是操作指南。 由于Windows中隱藏的虛擬Wi-Fi適配器功能,你甚至可以在連接到另一個Wi-Fi網絡或無線路由器時創建Wi-Fi熱點,通過另…

魯教版七年級數學上冊-筆記

文章目錄 第一章 三角形1 認識三角形2 圖形的全等3 探索三角形全等的條件4 三角形的尺規作圖5 利用三角形全等測距離 第二章 軸對稱1 軸對稱現象2 探索軸對稱的性質4 利用軸對稱進行設計 第三章 勾股定理1 探索勾股定理2 一定是直角三角形嗎3 勾股定理的應用舉例 第四章 實數1 …

實習生在Linux環境下如何日常使用?

那我簡單來說兩個我使用的場景吧 我在搭建我們的測試環境的時候&#xff0c;先上傳jar包到測試環境對應的目錄下&#xff0c;然后呢此時jar包是不可被執行的&#xff0c;所有就有了 chmod x jar包名稱, 接下來&#xff0c;我是用 jps 查看Java的進程&#xff0c;獲取到pid之后…

Kafka 安裝教程和基本操作

一、簡介 Kafka 是最初由 Linkedin 公司開發&#xff0c;是一個分布式、分區的、多副本的、多訂閱者&#xff0c;基于 zookeeper 協調的分布式日志系統&#xff08;也可以當做 MQ 系統&#xff09;&#xff0c;常見可以用于 web/nginx 日志、訪問日志&#xff0c;消息服務等等…

基于YOLO算法實現網球運動實時分析(附源碼)

大家好&#xff0c;我是小F&#xff5e; 今天給大家介紹一個計算機視覺實戰的項目。 該項目使用YOLO算法檢測球員和網球&#xff0c;并利用cnn提取球場關鍵點。 進而分析視頻中的網球運動員&#xff0c;測量他們的速度、擊球速度和擊球次數。 使用win10電腦&#xff0c;Python …

【源碼】java + uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼

java uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼 帶簡潔教程&#xff0c;未測 java uniapp交易所源代碼/帶搭建教程java交易所/完整源代碼 - 吾愛資源網

【古董技術】ms-dos應用程序的結構

序 制定一個MS-DOS應用程序計劃需要認真分析程序的大小。這種分析可以幫助程序員確定MS-DOS支持的兩種程序風格中哪一種最適合該應用程序。.EXE程序結構為大型程序提供了好處&#xff0c;因為所有.EXE文件之前都有額外的512字節&#xff08;或更多&#xff09;的文件頭。另一方…