1. 程式人生 > 實用技巧 >二、搜尋

二、搜尋

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) # 往左查詢 return
bi_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),什麼情況下適合此種方法?———> 陣列前提是排好序的