二、搜尋
阿新 • • 發佈:2020-12-21
1. 搜尋
(1)順序搜尋
def search(num_list, val): if num_list == None: return -1 for i in range(0, len(num_list)): if (num_list[i] == val): return i return -1
分析:時間複雜度為O(n),空間複雜度O(1)
(2) 二分搜尋
A. 遞迴版本
def bi_search_re(num_list, val): def bi_search(l, h):if l > h: return -1 mid = (l + h) // 2 if (num_list[mid] == val): # 遞迴的base情況 return mid; elif (num_list[mid] < val): # 往右查詢 return bi_search(mid + 1, h) else: return bi_search(l, mid - 1) # 往左查詢 returnbi_search(0, len(num_list)-1)
B. 迭代版本
def bi_search_iter(alist, item): left, right = 0, len(alist) - 1 while left <= right: mid = (left + right) // 2 if alist[mid] < item: # 向右查詢 left = mid + 1 elif alist[mid] > item: # 向左查詢 right = mid - 1 else: # alist[mid] = item return mid return -1
分析:時間複雜度O(lgN),空間複雜度O(1),什麼情況下適合此種方法?———> 陣列前提是排好序的