Python如何實(shí)現(xiàn)的二分查找算法
先來看個用Python實(shí)現(xiàn)的二分查找算法實(shí)例
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)om/weixin.html#_labeldown
運(yùn)行:
administrator@ubuntu:~/Python$ python test_search2.py 123456789 4
注:
1.'__':由于python的類成員都是公有、公開的被存取public,缺少像正統(tǒng)面向?qū)ο笳Z言的私有private屬性。
于是就用__來將就一下,模擬私有屬性。這些__屬性往往是內(nèi)部使用,通常情況下不用改寫。也不用讀取。
加上2個下劃線的目的,一是不和普通公有屬性重名沖突,二是不讓對象的使用者(非開發(fā)者)隨意使用。
2.__name__ == "__main__"表示程序腳本是直接被執(zhí)行的.
如果不等于表示腳本是被其他程序用import引入的.則其__name__屬性被設(shè)為模塊名
Python采用二分查找找出數(shù)字的下標(biāo)
要考慮有重復(fù)數(shù)字的情況
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 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:>
二分算法的定義不在多說了
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
最后在分享一個
'fileName--BinarySearch.py'
src = [] def BinarySearch(low, high, target, *src): '二分查找' while low <= high: mid = (low + high) // 2 midVal = src[mid] if target < midVal: high = mid - 1 elif target > midVal: low = mid + 1 else: return mid BinarySearch(low, high, target, *src) print('Please input 10 number:') for number in range(10): src.append(int(input('Num %d:' % number))) sortList = tuple(src) key = int(input('Please input key:')) location = BinarySearch(0, len(src) - 1, key, *sortList) if location != None: print('Find target at %d' % (location + 1)) else: print('No target!')
實(shí)例補(bǔ)充
#!/usr/bin/python env # -*- coding:utf-8 -*- def half_search(array,target): low = 0 high = len(array) - 1 while low < high: mid = (low + high)/2 if array[mid] > target: high = mid - 1 elif array[mid] < target: low = mid + 1 elif array[mid] == target: print 'I find it! It is in the position of:',mid return mid else: print "please contact the coder!" return -1 if __name__ == "__main__": array = [1, 2, 2, 4, 4, 5]
運(yùn)行結(jié)果如下:
I find it! It is in the position of: 4 4 -1 I find it! It is in the position of: 0 0 -1
以上就是Python如何實(shí)現(xiàn)的二分查找算法的詳細(xì)內(nèi)容,更多關(guān)于用Python實(shí)現(xiàn)的二分查找算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何通過Python實(shí)現(xiàn)定時打卡小程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)定時打卡小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11python之pygame模塊實(shí)現(xiàn)飛機(jī)大戰(zhàn)完整代碼
這篇文章主要為大家詳細(xì)介紹了python之pygame模塊實(shí)現(xiàn)飛機(jī)大戰(zhàn)完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11詳解Python中__str__和__repr__方法的區(qū)別
這篇文章主要介紹了__str__和__repr__方法的區(qū)別 ,__str__和__repr__是基本的內(nèi)置方法,使用時的區(qū)別也是Python學(xué)習(xí)當(dāng)中的基礎(chǔ),需要的朋友可以參考下2015-04-04Keras使用ImageNet上預(yù)訓(xùn)練的模型方式
這篇文章主要介紹了Keras使用ImageNet上預(yù)訓(xùn)練的模型方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python3中使用urllib的方法詳解(header,代理,超時,認(rèn)證,異常處理)
這篇文章整理了一些關(guān)于urllib使用中的一些關(guān)于header,代理,超時,認(rèn)證,異常處理處理方法,對大家學(xué)習(xí)python具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。2016-09-09python實(shí)現(xiàn)自主查詢實(shí)時天氣
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自主查詢實(shí)時天氣,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06Python 支付整合開發(fā)包的實(shí)現(xiàn)
這篇文章主要介紹了Python 支付整合開發(fā)包的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01python中的十大%占位符對應(yīng)的格式化的使用方法
本文主要介紹了python中的十大%占位符對應(yīng)的格式化的使用方法,它可以很好的幫助我們解決一些字符串格式化的問題, 文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2022-01-01