Python 算法之二分查找
阿新 • • 發佈:2017-10-18
序表 true range put earch 個數字 cnblogs ffffff -s
二分查找
二分查找又稱折半查找 優點是比較次數少,查找速度快,平均性能好 缺點是要求待查表為有序表,且插入刪除困難 折半查找方法適用於不經常變動而查找頻繁的有序列表。
猜數字遊戲
1、生成一個有序列表 2、用戶猜測某個數字是否在列表中
代碼:
#!/usr/bin/env python # -*- conding-utf8 -*- def binary_search(data_source, find_n): mid = int(len(data_source)/2) if mid >= 1: if data_source[mid] > find_n: # data in left print("data in left of [%s]" % data_source[mid]) print(data_source[:mid]) binary_search(data_source[:mid], find_n) elif data_source[mid] < find_n: # data in right print("data in right of [%s]" % data_source[mid]) print(data_source[mid:]) binary_search(data_source[mid:], find_n) elif data_source[mid] == find_n: print("found %s" % data_source[mid]) elif data_source[mid] == find_n: print("found %s" % data_source[mid]) else: print("not found") if __name__ == ‘__main__‘: data = list(range(1,100,3)) ret = input("請輸入猜測的數字:") binary_search(data, int(ret))
運行結果:
請輸入猜測的數字:50 data in right of [49] [49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97] data in left of [73] [49, 52, 55, 58, 61, 64, 67, 70] data in left of [61] [49, 52, 55, 58] data in left of [55] [49, 52] data in left of [52] [49] not found 請輸入猜測的數字:1 data in left of [49] [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46] data in left of [25] [1, 4, 7, 10, 13, 16, 19, 22] data in left of [13] [1, 4, 7, 10] data in left of [7] [1, 4] data in left of [4] [1] found 1
Python 算法之二分查找