- 二分查找
- 二分查找得定義
- 假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重複以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。
- 二分查找的侷限性
- 二分查找依賴得是順序表結構
- 二分查找針對的是有序得數據
- 小數據量優勢不大
- 因依賴順序表結構,所以不太適合大量數據。因爲連續得大內存空間比較少。
- 代碼
- 二分查找
- #查找出mun在lis中的下標
- def run(lis,num):
- left = 0
- right = len(lis)-1
- while left <= right:
- middle = (right + left)//2
- if num == lis[middle]:
- return middle
- elif num < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- return None
- 查找第一個與data相等的數據
- def run(lis, data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data<= lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if lis[left] == data:
- return left
- 查找最後一個與data相等得元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if lis[right] == data:
- return right
- 查找最後一個小於data的元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data <= lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if data == lis[left]:
- return left-1
- 查找第一個大於data的元素
- def run(lis,data):
- left = 0
- right = len(lis) - 1
- while left <= right:
- middle = (left + right)//2
- if data < lis[middle]:
- right = middle - 1
- else:
- left = middle + 1
- if data == lis[right]:
- return right+1
數據結構和算法----二分查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.