问题:已知数值5,查找数值3是否在数列A=[5.8.10.13]中。
讨论此问题,有基本的两种解法,第一种是:线性查找,即直接比较数值是否在数列中,其算法如下:
#利用线性查找的方法查找List中的值
def search(ist,x):
for i in range(len(ist)):
if ist[1] == x:
return i
return -1
ist = [5,8,10,13]
print search(ist,5)
#显示List的下标
上面是第一种解法,不难看出其最坏的运行时间为:K0n+k1,所以算出其时间复杂度为On.
#利用两分查找法查找list中的值
def bi_search(lst, x):
low = 0
high = len(lst) - 1
while low <= high:
mid = (low + high)/2
if lst[mid] == x:
return mid
elif ist[mid] > 1:
high = mid -1
else:
low = mid + 1
return -1
ist = [5,8,10,13]
print bi_search(ist,5)
#显示list的下标
其时间复杂为:Olog2n
_____________最后的话,作为某三线互联网公司HR,此题目是我们考察候选人的第一道笔试题,但是在实际过程中,我们发现很多候选人的算法能力都非常薄弱,在这道题的解法上,只能用线性查找来实现该算法——