python实现二分查找

两种方式实现:

二分查找的前提是要查找的列表已经是排过序的列表
1、使用循环方式

1
2
3
4
5
6
7
8
9
10
11
12
13
def binary_find(rlist, data):
len_ = len(rlist)
left = 0
right = len_ - 1
while left < right:
mid = (left + right) / 2
if rlist[mid] > data:
right = mid - 1
elif rlist[mid] < data:
left = mid + 1
else:
return True
return False

2、递归实现

1
2
3
4
5
6
7
8
9
10
11
12
13
def binary_recursion(rlist, data):
len_ = len(rlist)
left = 0
right = len_ - 1
if len_ < 1:
return False
mid = (left + right) / 2
if rlist[mid] > data:
return binary_recursion(rlist[0:mid], data)
elif rlist[mid] < data:
return binary_recursion(rlist[mid+1:], data)
else:
return True