1. 程式人生 > >Python使用二分法實現在一個有序列表中查詢指定的元素

Python使用二分法實現在一個有序列表中查詢指定的元素

回想這個面試題:Python在一個有序列表中查詢指定的元素?
一開始沒想到使用二分法查詢,直接說了遍歷這個列表與指定元素比較。

二分法是一種快速查詢的方法,時間複雜度低,邏輯簡單易懂,總的來說就是不斷的除以2除以2…
例如需要查詢有序list裡面的某個關鍵字key的位置,那麼首先確認list的中位數mid,下面分為三種情況:
如果 list[mid] < key,說明key 在中位數的 右邊;
如果 list[mid] > key,說明key 在中位數的 左邊;
如果 list[mid] = key,說明key 在中位數的中間;
範圍每次縮小一半,寫個while的死迴圈知道找到為止。

二分法查詢非常快且非常常用,但是唯一要求是要求陣列是有序的

程式碼如下

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

def BinarySearch(lista, key):
    # 記錄陣列的最高位和最低位
    min = 0
    max = len(lista) - 1

    if key in lista:
        # 建立一個死迴圈,直到找到key
        while True:
            # 得到中位數
            mid = (min + max) / 2
            # key在陣列左邊
if lista[mid] > key: max = mid - 1 # key在陣列右邊 elif lista[mid] < key: min = mid + 1 # key在陣列中間 elif lista[mid] == key: print str(key) + "在數組裡面的第" + str(mid) + "個位置" return
lista[mid] else: print("沒有該數字!") if __name__ == "__main__": arr = [1, 6, 9, 15, 26, 38, 49, 57, 63, 77, 81, 93] while True: key = input("請輸入你要查詢的數字:") if key == " ": print("謝謝使用!") break else: BinarySearch(arr, int(key))

相關文件

https://www.cnblogs.com/zeke-python-road/p/8120272.html