バイナリサーチのPython実装(再帰バージョン)

バイナリ検索
  • :なぜ、バイナリ検索を使用
    しますが、必要な値に到達するまで、リストの中を歩くために、一般的な値でリストのpythonを但是如果你的列表是一个有着百万元素的列表呢非常に遅くなり、リストをループ用として、そして何千回ものサイクル数百、あなたが見つける必要があるかもしれません資源の廃棄物として対応する値は、より迅速に対応する値を検索し、システムリソースを節約するためにので、誰かが二分法アルゴリズムを考案し、非常によくないです。
  • 原理
    注意:バイナリ検索は順序付きリストは、インクリメントまたはデクリメント、それは順序付けられたリストである必要がありますすることができなければなりません。
    バイナリ検索も呼ばれ折半查找、高効率的な検索方法で、すべての最初の、テーブルの要素が昇順であると仮定配置、キーワードテーブル>中間位置の検索キーとレコードの比較、両者が等しい場合は、検索が成功し、記録さもなければ位置中間テーブルによって>前面に2つのサブテーブル、レコードキー中間位置する場合、子テーブルの前にさらに子テーブルの後にそうでない>さらに検索を見て、その後、検索キーよりも大きいです。プロセスは条件が発見されたレコードを満たすまで繰り返され、検索が成功した場合、または子テーブルが存在しないまで>、その時点で検索が失敗しました
  • Pythonコードが実装(再帰的に)
def binary_Search(Array, num,small_num=None,high_num=None):
    small_num = small_num if small_num else 0
    high_num = high_num if high_num is not None else len(Array) - 1
    mid_num = (high_num + small_num) // 2
    if small_num <= high_num:
            if num > Array[mid_num]:return binary_Search(Array,num,mid_num+1,high_num)
            elif num < Array[mid_num]:return  binary_Search(Array, num, small_num,mid_num-1)
            else :return mid_num
    else:
            return '%s值不存在'%num
lis = [99, 222, 444, 544, 555, 567, 777, 786, 787, 991, 998, 5555, 8877]
ret = binary_Search(lis,555)
print('索引值为%s,对应值为%s'%(ret,lis[ret]))

おすすめ

転載: www.cnblogs.com/Hybb/p/11518909.html