用Python實現的二分查詢演算法?
阿新 • • 發佈:2020-12-14
先來看個用Python實現的二分查詢演算法例項
#!/usr/bin/env python import sys def search2(a,m): low = 0 high = len(a) - 1 while(low <= high): mid = (low + high)/2 midval = a[mid] if midval < m: low = mid + 1 elif midval > m: high = mid - 1 else: print mid return mid print -1 return -1 if __name__ == "__main__": a = [int(i) for i in list(sys.argv[1])] m = int(sys.argv[2]) search2(a,m)
執行:
administrator@ubuntu:~/Python$ python test_search2.py 123456789 4
注:
1.'__':由於python的類成員都是公有、公開的被存取public,缺少像正統面嚮物件語言的私有private屬性。
於是就用__來將就一下,模擬私有屬性。這些__屬性往往是內部使用,通常情況下不用改寫。也不用讀取。
加上2個下劃線的目的,一是不和普通公有屬性重名衝突,二是不讓物件的使用者(非開發者)隨意使用。
2.__name__ == "__main__"表示程式指令碼是直接被執行的.
如果不等於表示指令碼是被其他程式用import引入的.則其__name__屬性被設為模組名
Python採用二分查詢找出數字的下標
要考慮有重複數字的情況
class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ def binary_search(start,end,value): while end>=start: mid = (start+end)//2 print(mid) if nums[mid]>target: end = mid-1 elif nums[mid]<target: start="mid+1" else:="" if="" value="=-1:" mid-1="">=start and nums[mid+value] == target: end = mid+value else: return mid else: if mid+1<=end and nums[mid+value] == target: start = mid+value else: return mid return -1 a=binary_search(0,len(nums)-1,-1) b=binary_search(0,len(nums)-1,1) return [a,b] a = Solution() l = [2,2] print(a.searchRange(l,2)) </target:>
二分演算法的定義不在多說了
'fileName--BinarySearch.py'最後在分享一個
import sys source = [1,2,3,4,5,6,7,8,9,10] #must be in order des = int(sys.argv[1]) low = 0 high = len(source) - 1 targetIndex = -1 print "des=",des while low <= high: middle = (low + high)/2 if des == source[middle]: targetIndex = middle break elif des < source[middle]: high = middle -1 print "middle element[index=",middle,",value=",source[middle],"] is bigger than des, continue search from[",low,"to",high,"]" else: low = middle + 1 print "middle element[index=",middle,",value=",source[middle],"] is smaller than des, continue search from[",low,"to",high,"]" print "search complete, target element's index in source list is ",targetIndex
原文至:https://www.py.cn/jishu/jichu/10384.html