Python 有序數列二分查找法


#二分查找法:

二分搜索是一種在有序數組中查找某一特定元素的搜索算法。

搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;

如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。

如果在某一步驟數組為空,則代表找不到。

這種搜索算法每一次比較都使搜索范圍縮小一半。

方法一:(while循環法)

def binarySearch(arr,x): #自定義函數:arr:有序數組;x:待查找值
  low,high=0,len(arr)-1  #初始查詢下標索引
  while low<=high: #循環判斷
    mid=int((low+high)/2) #獲取有序數組中間值下標索引
    if x==arr[mid]: #判斷待查找值與中間索引值相同
      return mid #返回索引下標
    elif x>arr[mid]: #判斷待查值大於中間索引值時
      low=mid+1 #開始索引下標賦新值
    else: #判斷待查值小於中間索引值時
      high=mid-1 #結束索引下標賦新值
  return -1 #while循環判斷不成立時

 

#測試
arr=[2,3,4,10,40]
x=10
result=binarySearch2(arr,x)
print(result)

 

方法二:(遞歸法)

def binarySearch(arr,s,e,x): #自定義遞歸函數 arr:有序數組,s:開始索引下標,e:結束索引下標,x:待查值
  if s<=e: #循環判斷
    mid=int((e+s)/2)  #獲取有序數組中間值下標索引
    if arr[mid]==x:  #判斷待查找值與中間索引值相同
      return mid  #返回索引下標
    elif arr[mid] < x: #判斷待查值大於中間索引值時
      return binarySearch(arr,mid+1,e,x) #遞歸:開始索引下標賦新值
    else: #判斷待查值小於中間索引值時
      return binarySearch(arr,s,mid-1,x) #遞歸:結束索引下標賦新值
  else: #外層 if 循環判斷不成立時
    return -1

 


#測試數組
arr=[2,3,4,10,40]
x=10

#函數調用
result=binarySearch(arr,0,len(arr)-1,x)

print(result)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM