python查找算法:二分法
阿新 • • 發佈:2017-11-09
就是 common 復制 container pytho max images print 範圍
二分法是一種快速查找的方法,時間復雜度低,邏輯簡單易懂,總的來說就是不斷的除以2除以2...
例如需要查找有序數組arr裏面的某個關鍵字key的位置,那麽首先確認arr的中位數或者中點center,下面分為三種情況:
1 2 3 |
假如arr[center]>key,說明key在arr中心左邊範圍;
假如arr[center]<key,說明key在arr中心右邊範圍;
假如arr[center]=key,說明key在arr中心。
|
範圍每次縮小一半,寫個while的死循環知道找到為止。
二分法查找非常快且非常常用,但是唯一要求是要求數組是有序的
我的另一篇博客剛好介紹了冒泡排序可以去看看:
1 |
http: //www.cnblogs.com/TTyb/p/5726151.html
|
二分法的代碼如下:
1 #!/usr/bin/python3.4 2 # -*- coding: utf-8 -*- 3 4 def BinarySearch(arr, key): 5 # 記錄數組的最高位和最低位 6 min = 0 7 max = len(arr) - 1 8 9 if key in arr: 10 # 建立一個死循環,直到找到key 11 while True: 12 # 得到中位數 13 # 這裏一定要加int,防止列表是偶數的時候出現浮點數據 14 center = int((min + max) / 2) 15 # key在數組左邊 16 if arr[center] > key: 17 max = center - 1 18 # key在數組右邊 19 elif arr[center] < key: 20 min = center + 1 21 # key在數組中間 22 elif arr[center] == key: 23 print(str(key) + "在數組裏面的第" + str(center) + "個位置") 24 return arr[center] 25 else: 26 print("沒有該數字!") 27 28 29 if __name__ == "__main__": 30 arr = [1, 6, 9, 15, 26, 38, 49, 57, 63, 77, 81, 93] 31 while True: 32 key = input("請輸入你要查找的數字:") 33 if key == " ": 34 print("謝謝使用!") 35 break 36 else: 37 BinarySearch(arr, int(key))
運行結果:
原文出自TTyb
python查找算法:二分法