标签:search bre count arch 有序 序列 def while arc
?分查找.
每次能够排除掉?半的数据. 查找的效率非常?. 但是局限性比较?. 必须是有 序序列才可以使??分查找 要求: 查找的序列必须是有序序列.
# 判断n是否在lst中出现. 如果出现请返回n所在的位置 # ?分查找---?递归算法 lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789] n = 567 left = 0 right = len(lst) - 1 count = 1 while left <= right: middle = (left + right) // 2 if n < lst[middle]: right = middle - 1 elif n > lst[middle]: left = middle + 1 else: print(count) print(middle) break count = count + 1 else: print("不存在")
普通递归版本?分法
def binary_search(n, left, right): if left <= right: middle = (left+right) // 2 if n < lst[middle]: right = middle - 1 elif n > lst[middle]: left = middle + 1 else: return middle return binary_search(n, left, right) # 这个return必须要加. 否则接收 到的永远是None. else: return -1 print(binary_search(567, 0, len(lst)-1))
另类?分法, 很难计算位置
def binary_search(ls, target): left = 0 right = len(ls) - 1 if left > right: print("不在这?") middle = (left + right) // 2 if target < ls[middle]: return binary_search(ls[:middle], target) elif target > ls[middle]: return binary_search(ls[middle+1:], target) else: print("在这?") binary_search(lst, 567)
标签:search bre count arch 有序 序列 def while arc
原文地址:https://www.cnblogs.com/y0413/p/10009772.html