python--二分法查找
二分法查找又称折半查找。二分法查找是在一个有序列表的基础上完成的,要查找的值x和列表的中间值m作比较,如果x大于m,那么接下来从m+1的右区间内再以相同方法取中间值做判断,循环往复此过程,直到判断出x=m的时候就是查找成功。否则相反。返回类型为布尔值
时间复杂度为 O(logn) 空间复杂度:O(1)
两种实现二分法查找的方法:递归、非递归 代码奉上
# 递归实现: def binary_seach(alist,item): if len(alist) == 0: return False else: mid = len(alist) // 2 # middle 记录中间位置索引 if item == alist[mid]: # 如果查找元素与中间位置元素相等 则返回真 return True elif item < alist[mid]: # 如果查找元素小于中间位置元素,则进行列表切片缩小列表范围 return binary_seach(alist[:mid],item) else: return binary_seach(alist[mid+1:],item) if __name__ == '__main__': alist = [5, 10, 15, 18, 35, 55, 65, 75, 99] print(binary_seach(alist,200)) # 查找列表中不存在的数据 print("__________________") print(binary_seach(alist,15)) # 查找列表中存在的数据
#非递归实现: def binary_seach(alist,item): first = 0 # 起始下标为0 last = len(alist) - 1 # 列表最后一位的索引 while first <= last: # 列表中间位置的索引值 mid = (first + last) // 2 if item == alist[mid]: return True elif item < alist[mid]: last = mid -1 else: first = mid + 1 else: return False if __name__ == '__main__': alist = [5,10,15,18,35,55,65,75,99] # 有序序列 print(binary_seach(alist, 200))
python 中文名:蟒蛇,设计者:Guido van Rossum