列表查詢及二分查詢 列表查詢以及二分查詢
阿新 • • 發佈:2018-12-27
列表查詢以及二分查詢
一、列表查詢
1、列表查詢:從列表中查詢指定元素
- 輸入:列表、待查詢元素
- 輸出:元素下標或未查詢到元素
2、順序查詢:從列表第一個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引
3、二分查詢:從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。
二分查詢:時間複雜度是O(logn)
二分查詢的前提:列表是有序的
切片的複雜讀是O(n) #因為切的時候是賦值的
二分查詢示例
def serach(li,val): low = 0 #開始索引 high = len(li) - 1 #結束索引 while low<=high: mid = (low+high)//2 if li[mid] > val: #如果中間值比傳進來的值大就從中間值的左邊找 high = mid-1 elif li[mid]<val: low = mid +1 else: return midelse: return -1 li = list(range(0,101,2)) print(serach(li,98)) # ==================遞迴版的二分查詢=========== def bin_serach_rec(li,val,low,high): if low<=high: mid = (low+high)//2 if li[mid] >val: return bin_serach_rec(li,val,low,mid-1,) elif li[mid]<val:return bin_serach_rec(li,val,mid+1,high) else: return mid else: return li = list(range(0,101,2)) print(serach(li,98))
二、列表排序
1、列表排序
將無序列表變為有序列表
2、應用場景
- 各種榜單
- 各種表格
- 給二分查詢用
- 給其他演算法用
輸入:無序列表
輸出:有序列表
一、列表查詢
1、列表查詢:從列表中查詢指定元素
- 輸入:列表、待查詢元素
- 輸出:元素下標或未查詢到元素
2、順序查詢:從列表第一個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引
3、二分查詢:從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。
二分查詢:時間複雜度是O(logn)
二分查詢的前提:列表是有序的
切片的複雜讀是O(n) #因為切的時候是賦值的
二分查詢示例
def serach(li,val): low = 0 #開始索引 high = len(li) - 1 #結束索引 while low<=high: mid = (low+high)//2 if li[mid] > val: #如果中間值比傳進來的值大就從中間值的左邊找 high = mid-1 elif li[mid]<val: low = mid +1 else: return mid else: return -1 li = list(range(0,101,2)) print(serach(li,98)) # ==================遞迴版的二分查詢=========== def bin_serach_rec(li,val,low,high): if low<=high: mid = (low+high)//2 if li[mid] >val: return bin_serach_rec(li,val,low,mid-1,) elif li[mid]<val: return bin_serach_rec(li,val,mid+1,high) else: return mid else: return li = list(range(0,101,2)) print(serach(li,98))
二、列表排序
1、列表排序
將無序列表變為有序列表
2、應用場景
- 各種榜單
- 各種表格
- 給二分查詢用
- 給其他演算法用
輸入:無序列表
輸出:有序列表