順序搜索 是最簡單直觀的搜索方法:從列表開頭到末尾蒙保,逐個比較待搜索項與列表中的項辕棚,直到找到目標項(搜索成功)或者 超出搜索范圍 (搜索失敗)邓厕。
根據(jù)列表中的項是否按順序排列逝嚎,可以將列表分為 無序列表 和 有序列表。對于 無序列表详恼,超出搜索范圍 是指越過列表的末尾补君;對于 有序列表,超過搜索范圍 是指進入列表中大于目標項的區(qū)域(發(fā)生在目標項小于列表末尾項時)或者指越過列表的末尾(發(fā)生在目標項大于列表末尾項時)单雾。
1赚哗、無序列表
def sequentialSearch(items, target):
for item in items:
if item == target:
return True
return False
2、有序列表
def orderedSequentialSearch(items, target):
for item in items:
if item == target:
return True
elif item > target:
break
return False
3. 二分搜索
二分搜索 充分利用了有序列表的優(yōu)勢硅堆,該算法的思路非常巧妙:在原列表中屿储,將目標項(target)與列表中間項(middle)進行對比,如果target等于middle渐逃,則搜索成功够掠;如果target小于middle,則在middle的左半列表中繼續(xù)搜索茄菊;如果target大于middle疯潭,則在middle的右半列表中繼續(xù)搜索。
def recursiveBinarySearch(items, target):
if len(items )==0:
return False
else:
middle = len(items)//2
if target = = items[middle]:
return True
elif target < items [middle]:
return recursiveBinarySearch(items[:, middle], target)
else:
return recursiveBinarySearch(items[middle+1:], target)