二分法查找簡(jiǎn)介
輸入:一個(gè)"有序"元素列表
輸出:返回要查找的元素位置,沒(méi)有這個(gè)元素則返回None
使用背景簡(jiǎn)介
假如有一個(gè)需求,在1-100順序排列的數(shù)中找到指定的數(shù)字N,我們能想到的辦法有:
方法(1), 在1開(kāi)始, 挨個(gè)詢問(wèn)是不是1,是不是2,..., 一直到指定的N,如果N是100的話,我們需要試驗(yàn)到第100次才能猜中,也就是說(shuō)在順序查找中,我們最多需要100次完成需求,假設(shè)試驗(yàn)一次需要0.001秒,試驗(yàn)100次找到指定數(shù)字,最多需要0.1秒. 俗話講: 拋開(kāi)數(shù)據(jù)規(guī)模和復(fù)雜度談算法,純屬耍流氓! 如果我們面對(duì)的是10億個(gè)數(shù)字, 在里面查找指定數(shù)字,最多需要10億*0.001秒 = 100萬(wàn)秒≈277小時(shí)
方法(2), 面對(duì)1-100, 首先最大化的排除無(wú)用數(shù)據(jù), 先猜是不是50, 是就返回, 不是返回50是大了還是小了, 然后把50當(dāng)做上邊界或者下邊界, 再次猜中間位置, 這樣依次猜下去, 例如我們N=100,s1猜50小了, s2猜75, s3猜88, s4猜94, s5猜97, s6猜99, s7猜100共計(jì)7步找到結(jié)果, 如果是10億需要多少次呢? 答案是()=30次
代碼實(shí)現(xiàn)

代碼截圖