1. 程式人生 > >Python 算法之二分查找

Python 算法之二分查找

序表 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 算法之二分查找