使用二分查找法的前置条件
必须是一个已经排好序的数组
二分查找定义
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
示例图
循环版二分查找法
def bin_serach(data_set, val): """ 二分查找法 :param data_set:传入一个已经拍好序的数组 :param val: 目标值 :return: 数组中目标值的下标 """ low = 0 high = len(data_set) - 1 while low <= high: mid = (low + high) // 2 if data_set[mid] == val: return mid elif data_set[mid] < val: low = mid + 1 else: high = mid - 1 return '无此值'ret = bin_serach([1, 2, 3, 4, 5, 6, 7], 11)print(ret)
递归版二分查找法
def bin_serach(data_set, val, low, high): """ 二分查找法 :param data_set: 传入一个已经拍好序的数组 :param val: 目标值 :param low: 列表最小下标 :param high: 列表最大下标 :return: 数组中目标值的下标 """ while low <= high: mid = (low + high) // 2 if data_set[mid] == val: return mid elif data_set[mid] < val: return bin_serach(data_set, val, mid + 1, high) else: return bin_serach(data_set, val, low, mid - 1) return '无此值'data_set = [1, 2, 3, 4, 5, 6, 7]ret = bin_serach(data_set, 1, 0, len(data_set)-1)print(ret)