標籤:列表 順序 演算法 not 實現 body top col pac
一.順序尋找---O(n)
無序列表尋找
def sequentialSearch(alist,item):pos = 0found = Falsewhile pos < len(alist) and not found:if alist[pos] == item:found = Trueelse:pos = pos + 1return foundlist = [2,3,1,4,5,6,0]print(sequentialSearch(list,5))print(sequentialSearch(list,7))
有序列表尋找
def ordersequentialSearch(alist,item):pos = 0found = Falsestop = Falsewhile pos < len(alist) and not found and not stop:if alist[pos] == item:found = Trueelse:if alist[pos] > item:stop = Trueelse:pos = pos + 1return foundlist = [1,2,3,4,5,6,7]print(ordersequentialSearch(list,3))print(ordersequentialSearch(list,9))
二.二分尋找---O(log^n)
def binarySearch(alist,item):first = 0 last = len(list) - 1found = Falsewhile first <= last and not found:midpoint = (first + last) // 2if alist[midpoint] == item:found = Trueelse:if item < alist[midpoint]:last = midpoint - 1else:first = midpoint + 1return found list = [0,1,2,3,4,5,6,7,8]print(binarySearch(list,3))print(binarySearch(list,10))
遞迴實現二分尋找
def binarySearchCur(alist,item):if len(alist) == 0:return Falseelse:midpoint = len(alist) // 2if alist[midpoint] == item:return Trueelse:if item < alist[midpoint]:return binarySearchCur(alist[:midpoint],item)else:print(alist[midpoint+1:])return binarySearchCur(alist[midpoint+1:],item)
def sequentialSearch(alist,item):pos = 0found = False
while pos < len(alist) and not found:if alist[pos] == item:found = Trueelse:pos = pos + 1return foundlist = [2,3,1,4,5,6,0]print(sequentialSearch(list,5))print(sequentialSearch(list,7))
Python實現尋找演算法