日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【python】数据结构与算法之二分查找

發(fā)布時間:2025/3/21 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【python】数据结构与算法之二分查找 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、查找

在一組數(shù)據(jù)中找某一個特定項的算法過程
通常用來判斷某個特定項是否在一組數(shù)據(jù)中,最終返回True或False
常用的查找算法:順序查找、二分查找、樹表查找、哈希查找等

二、二分查找

二分查找又稱為折半查找,要求待查表為有序表
將表中間位置記錄的關鍵字與查找關鍵字比較,如果相等則比較成功;否則利用中間位置的記錄縮小區(qū)間,繼續(xù)查找縮小后的區(qū)間。
重復上面的步驟直到查找成功,或者子表不存在,則查找失敗

三、畫圖演示


例如查找6是否在數(shù)組中
1、找到中間值mid=len(nums)//2==5
2、索引為5時,值為9;比較nums[5]>6,可知目標值在nums[5]的左邊
3、將右游標移動,移動到mid-1的位置

4、找到中間值mid=len(nums)//2=2
5、索引為2時,值為4;比較nums[2]<6,可知目標值在nums[2]的右邊
6、移動左游標,移動到mid+1的位置

7、找到中間值mid=len(nums)//2=1
8、索引為1時,值為8;比較nums[1]>6,可知目標值在nums[2]的左邊
9、將右游標移動,移動到mid-1的位置

10、此時左游標和右游標重合
11、找到中間值mid=len(nums)//2=0
12、索引為0時,值為6;比較nums[1]=6,找到目標值,否則數(shù)組中沒有目標值

四、代碼塊

采用遞歸方法
時間復雜度為O(logn)

def binary_search(nums,target,left,right):'''二分查找遞歸版:param nums: 待查找的數(shù)組,要求時升序的:param target:要找的的數(shù)字:param left:區(qū)間的左邊索引:param right:區(qū)間的右邊索引:return:target在nums中就返回True,否則返回False'''#遞歸的結束條件,left>rightif left>right:return False#找中間值mid=(left+right)//2 #中間值的索引#判斷中間值是否等于目標值if nums[mid]==target:return True#如果中間值小于目標值,說明目標值只能在中間值的右邊區(qū)間if nums[mid]<target:left=mid+1return binary_search(nums,target,mid+1,right)# 如果中間值大于目標值,說明目標值只能在中間值的左邊區(qū)間return binary_search(nums,target,left,mid-1)test=[1,3,4,6,8,9,15,19,44,44] print(binary_search(test,15,0,len(test)-1)) print(binary_search(test,14,0,len(test)-1))

總結

以上是生活随笔為你收集整理的【python】数据结构与算法之二分查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。