跟黃哥學python序列文章之python二分查找算法

#跟黃哥學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))

#用途實例: 白名單過濾,有一家商業銀行,將數千萬客戶名單保存爲文本文件中,爲白名單。
白名單處理成排序好的數組。能夠用二分查找算法快速排除用戶帳號是否是銀行的客戶。算法

點擊黃哥python培訓試看視頻播放地址編程

黃哥python遠程視頻培訓班數組

相關文章
相關標籤/搜索