python 二分法查找
import random,time
start = time.time()
def find(data,keyword,left,right):
'''
二分法查找
:param data: 有序数组
:param keyword: 要查找的数据
:param left: 数组左索引
:param right: 数组右索引
:return: 所有符合条件下标
'''
middle = (left+right)//2
if left>right:
return -1
if keyword < data[middle]:
return find(data,keyword,left,middle-1)
elif keyword > data[middle]:
return find(data, keyword, middle+1, right)
else:
L = middle-1
while keyword==data[L]:
L-=1
R = middle + 1
while keyword == data[R]:
R += 1
return [x for x in range(L+1,R)]
if __name__ == '__main__':
data = [random.randint(1,10000) for i in range(10000)]
data.sort()
ret = find(data,95,0,len(data))
print(ret)
end = time.time()
print(end-start)
input()