顺序查找
无序查找
def sequentialSearch(alist,item):
pos=0
found=False
while pos<len(alist) and found==False:
if alist[pos]==item:
found=True
else:
pos+=1
return found
时间复杂度O(n),最坏情况要比对所有的元素才能判断是否在列表中。
有序查找
def orderedsequentialSearch(alist,item):
pos=0
while pos<len(alist):
if alist[pos]==item:
return True
elif alist[pos]<item:
pos+=1
else:
return False
return False
有序表从小到大排列,则无需查找完整个列表,只要查找的值大于当前元素,则后面的元素都大,停止查找。
时间复杂度:O(n)
二分查找
分治策略。
非递归代码
def binarySearch(orderedlist,item):
first=0
last=len(orderedlist)-1
while first<=last:
mid=(first+last)//2
if orderedlist[mid]==item:
return True
elif orderedlist[mid]>item:
last=mid-1
else:
first=mid+1
return False
递归代码
def binarySearch1(alist,item):
if len(alist)<=0:
return False
mid=len(alist)//2
if alist[mid]==item:
return True
elif alist[mid]>item:
return binarySearch1(alist[:mid],item)
else:
return binarySearch1(alist[mid+1:],item)
时间复杂度O(logn),前提条件是有序表。对无序表进行排序也要消耗一定的时间复杂度,所以需要权衡选择。