二分搜索算法python,python编写函数实现二分法查找
让我们看一个用Python实现的二分搜索法算法的例子。
#!/usr/bin/envpython
importsys
defsearch2(a,m):
低=0
高=len(a)-1
而(低=高):
mid=(低高)/2
midval=a[mid]
ifmidvalm:
低=中1
elifmidvalm:
高=中间1
else:
打印中间
returnmid
打印-1
返回-1
if__name__==__main__:
a=[int(I)for iinlist(sys . argv[1])]
m=int(sys.argv[2])
2(上午,下午)运行:
administrator @ Ubuntu : ~/PythonPython test _ search 2 . py 1234567894注:
1.__ :因为python的类成员都是公共的,都是公开访问的public,所以缺少正统面向对象语言那样的私有属性。
所以我凑合用_ _来模拟私有属性。这些_ _属性通常在内部使用,通常不需要重写。你不必读它。
加两个下划线的目的是为了不与常用公共属性的重名冲突,也是为了防止对象的用户(非开发者)随意使用。
2._ _ name _ _= _ _ main _ _ 表示直接执行程序脚本。
如果这并不意味着该脚本是由其他程序用import导入的,则它的__name__属性被设置为模块名
Python采用二分查找找出数字的下标
考虑有重复数字的情况。
classSolution(对象):
defsearchRange(自身,数量,目标):
:typenums:List[int]
:类型目标:int
:rtype:List[int]
defbinary_search(开始,结束,值):
铌
sp;whileend>=start:
mid=(start+end)//2
print(mid)
ifnums[mid]>target:
end=mid-1
elifnums[mid]<target:start="mid+1"else:=""if=""value="=-1:"mid-1="">=startandnums[mid+value]==target:
end=mid+value
else:
returnmid
else:
ifmid+1<=endandnums[mid+value]==target:
start=mid+value
else:
returnmid
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:>二分算法的定义不在多说了
importsys最后在分享一个source=[1,2,3,4,5,6,7,8,9,10]#mustbeinorder
des=int(sys.argv[1])
low=0
high=len(source)-1
targetIndex=-1
print"des=",des
whilelow<=high:
middle=(low+high)/2
ifdes==source[middle]:
targetIndex=middle
break
elifdes<source[middle]:
high=middle-1
print"middleelement[index=",middle,",value=",source[middle],"]isbiggerthandes,continuesearchfrom[",low,"to",high,"]"
else:
low=middle+1
print"middleelement[index=",middle,",value=",source[middle],"]issmallerthandes,continuesearchfrom[",low,"to",high,"]"
print"searchcomplete,targetelement'sindexinsourcelistis",targetIndex
'fileName--BinarySearch.py'
src=[]
defBinarySearch(low,high,target,*src):
'二分查找'
whilelow<=high:
mid=(low+high)//2
midVal=src[mid]
iftarget<midVal:
high=mid-1
eliftarget>midVal:
low=mid+1
else:
returnmid
BinarySearch(low,high,target,*src)
print('Pleaseinput10number:')
fornumberinrange(10):
src.append(int(input('Num%d:'%number)))
sortList=tuple(src)
key=int(input('Pleaseinputkey:'))
location=BinarySearch(0,len(src)-1,key,*sortList)
iflocation!=None:
print('Findtargetat%d'%(location+1))
else:
print('Notarget!')
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。