#跟黃哥學python序列文章之python二分查找算法python
在計算機科學中,二分查找算法(binary search)、也稱折半搜索(英語:half-interval search),
二分搜索法、二分搜索、二分探索,是一種在有序數組中查找某一特定元素的搜索算法。
搜索過程從數組的中間元素開始,若是中間元素正好是要查找的元素,則搜索過程結束;
若是某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,
並且跟開始同樣從中間元素開始比較。若是在某一步驟數組爲空,則表明找不到。
這種搜索算法每一次比較都使搜索範圍縮小一半。 (來源於維基百科)git
#! /usr/bin/python # coding:utf-8 def binary_search_while(key, arr): '''list 必須是排序好的 黃哥python培訓_python編程思路之四 諮詢qq:1465376564 http://www.tudou.com/programs/view/Z4IClY5Wj-g/ 運維如何經過學習python學會編程 https://github.com/pythonpeixun/article/blob/master/python/how_to_learn_python.md 黃哥python遠程視頻培訓班 https://github.com/pythonpeixun/article/blob/master/index.md 黃哥python培訓試看視頻播放地址 https://github.com/pythonpeixun/article/blob/master/python_shiping.md ''' start = 0 end = len(arr) - 1 while start <= end: mid = start + (end - start) // 2 if arr[mid] < key: start = mid + 1 elif arr[mid] > key: end = mid - 1 else: return mid return -1 if __name__ == '__main__': arr = [3, 9, 28, 67, 12, 45] arr.sort() print(binary_search_while(12, arr)) print(binary_search_while(3, arr)) print(binary_search_while(9, arr)) print(binary_search_while(99, arr))
#二分查找遞歸版github
#! /usr/bin/python # coding:utf-8 def binary_search_recursion(key, arr, start, end): '''list 必須是排序好的 黃哥python培訓_python編程思路之四 諮詢qq:1465376564 http://www.tudou.com/programs/view/Z4IClY5Wj-g/ 運維如何經過學習python學會編程 https://github.com/pythonpeixun/article/blob/master/python/how_to_learn_python.md 黃哥python遠程視頻培訓班 https://github.com/pythonpeixun/article/blob/master/index.md 黃哥python培訓試看視頻播放地址 https://github.com/pythonpeixun/article/blob/master/python_shiping.md ''' if start > end: return -1 mid = start + (end - start) // 2 if arr[mid] > key: return binary_search_recursion(key, arr, start, mid - 1) if arr[mid] < key: return binary_search_recursion(key, arr, mid + 1, end) return mid if __name__ == '__main__': arr = [3, 9, 28, 67, 12, 45] arr.sort() print(binary_search_recursion(12, arr, 0, len(arr)-1)) print(binary_search_recursion(3, arr, 0, len(arr)-1)) print(binary_search_recursion(9, arr, 0, len(arr)-1)) print(binary_search_recursion(99, arr, 0, len(arr)-1))
#用途實例: 白名單過濾,有一家商業銀行,將數千萬客戶名單保存爲文本文件中,爲白名單。
白名單處理成排序好的數組。能夠用二分查找算法快速排除用戶帳號是否是銀行的客戶。算法