Python二分查找/折半查找算法詳解--(面試常考)

  二分查找也稱折半查找(Binary Search),這種搜索算法每一次比較都使搜索範圍縮小一半,是一種效率較高的查找方法。

概念

  是一種在有序數組中查找某一特定元素的查詢算法。搜索過程從數組的中間元素開始,如果中間元素與要查找的元素相等,則搜索過程結束;如果查找元素大於或小於中間元素,則在數組大於或小於中間元素的那一半中進行查找,而且跟開始一樣從中間元素開始比較。重複以上過程,直到找到滿足條件的元素,使查找成功,或直到數組爲空爲止,此時查找不成功。

要求

  必須採用順序存儲結構,且按關鍵字大小進行有序排列。

代碼舉例

#coding=utf-8

# 二分查找  (遞歸)
# 返回 x 在 lists 中的索引,如果不存在返回None
def binarySearch(lists, left, right, x):

    # 如果右邊的值大於左邊的值
    if right >= left:
        # 取左右兩個數的中間值
        mid = (left + (right - left) // 2)

        # 若目標元素正好是中間位置,就返回mid,搜索過程結束
        if lists[mid] == x:
            return mid

        # 元素小於中間位置的元素,比較左邊的元素,且移動right下標
        elif lists[mid] > x:
            return binarySearch(lists, left, mid - 1, x)

        # 元素大於中間位置的元素,比較右邊的元素,移動left下標
        else:
            return binarySearch(lists, mid + 1, right, x)

    else:
        # 不存在的目標元素的情況就返回None
        return


# 測試舉例數組
arr = [1, 2, 3, 4, 5]
x = 6

# 函數調用
result = binarySearch(arr, 0, len(arr) - 1, x)

if result != None:
    print("您輸入的元素在數組中的索引爲 %d" % result)
else:
    print("您輸入的元素不在數組中")



運行結果:
在這裏插入圖片描述
當x=3時;
運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章