算法(一):二分算法
1. 二分查找的思想
在我们对一组有规律的数据进行处理时,如果按依次循环处理时,往往需要花费较长的时间(算术增长,顺序查找)。故二分算法应运而生,将数据平分为2,这样每次循环可以排除一半值(指数增长)。这就是最简单的二分算法。
2. 二分查找的应用
-
猜数字游戏:
在
[0~100]
区间中,主持人选一个数记住,其余人猜,每次猜,主持人只能回复:大了
,小了
,猜对了
; -
一般的二分代码
def foo(li,item): # 设定初始值范围。长度为n的数组,由0开始到n-1结束 start = 0 end = len(li)-1 # 设置循环条件:开始值始终小于结束值; while start<=end: # 每次循环,取中间值 mid = (start+end)//2 if li[mid] == item: print(li[mid],'猜对了') return True elif li[mid] < item: print(li[mid],'小了') start = mid + 1 else: print(li[mid],'大了') end = mid - 1 if __name__ == '__main__': # 建立一个数组 li = [] for i in range(1,101): li.append(i) # 选择目标值 item = 7 foo(li,item)
-
递归的二分代码
def foo(li:list,item:int): n = len(li) m = n // 2 if n >= 1: if li[m] == item: return True elif li[m] > item: return foo(li[:m],item) # 注意递归使用切片时的范围 else: return foo(li[m+1:],item) return False if __name__ == '__main__': li = [] for i in range(1,101): li.append(i) item = 7 foo(li,item)