二分查詢 python3 二分法查詢演算法及功能擴充套件

2021-10-14 17:44:01 字數 2650 閱讀 6334

二分查詢顧名思義就是從序列的中間位置查詢,都將目標數字與序列的中間位置數字進行對比,如果目標數字等於中間位置數字則返回對應的序列索引,如果目標數字大於中間位置數字,則繼續從右側的序列中利用二分查詢,如果目標數字小於中間位置數字,則繼續從左側的序列中利用二分查詢,直到查到目標數字為止。二分法查詢的效率很高,但是也有其侷限性,比如,目標序列必須是有序的序列,查詢的目標如果在序列中有多個,只能查詢到乙個等。

這裡介紹了基礎的二分查詢演算法,並且對其進行了簡單的擴充套件,擴充套件後增加:

容錯功能,當傳參不符合要求的時候不會丟擲異常

查全功能,可以查到目標序列中全部的目標數字的位置

無序序列處理,如果序列為無序序列時,可以選擇是做普通查詢還是轉換為有序序列後做二分查詢

結果格式化,返回結果為乙個字典

下面分別以和文字形式進行(截圖由於左右限制無法在寬度上截全圖,但是下面的原始碼是全的可複製的)

1、基礎的二分查詢

說明

baselist 必須為有序的數字序列

targetnum 必須為數字

如果查詢到目標數字則返回對應的索引,如果沒查詢到則返回-1

傳參型別錯誤時會丟擲異常

原始碼

# 二分法查詢目標數字,baselist必須為有序的數字序列(列表或元組)def halfsearchtargetnum(baselist, targetnum):    leftindex = 0    rightindex = len(baselist) - 1    while leftindex <= rightindex:        midindex = int((leftindex + rightindex) / 2)        if baselist[midindex] < targetnum:            leftindex = midindex + 1        elif baselist[midindex] > targetnum:            rightindex = midindex - 1        else:            return midindex    return -1
呼叫

if __name__ == '__main__':    test = [-20, -3, 1, 3, 5, 5, 6, 7.6, 8, 56]    print('結果1:', halfsearchtargetnum(test, 5))    print('結果2:', halfsearchtargetnum(test, 7.6))    print('結果3:', halfsearchtargetnum(test, 56))    print('結果4:', halfsearchtargetnum(test, -20))    print('結果5:', halfsearchtargetnum(test, 9))
呼叫結果

結果1: 4結果2: 7結果3: 9結果4: 0結果5: -1
2、二分查詢演算法擴充套件**中有詳細的注釋說明,擴充套件後增加的內容包括:

容錯功能,當傳參不符合要求的時候不會丟擲異常

查全功能,可以查到目標序列中全部的目標數字的位置

無序序列處理,如果序列為無序序列時,可以選擇是做普通查詢還是轉換為有序序列後做二分查詢

結果格式化,返回結果為乙個字典

原始碼

呼叫

if __name__ == '__main__':    test1 = [5, 5.1, 5.1, 5.1, 5.11]    test2 = [-20, -3, 92, 12, -2, 12, 7.6, 8, 56]    test3 = 99    test4 = [-20, -3, 92, 12, -2, '12', 7.6, 8, 56]    print('結果1:',halfsearchtargetnum(test1, 5.1))    print('結果2:',halfsearchtargetnum(test1, 5.1, issorted=true))    print('結果3:',halfsearchtargetnum(test2, 12, issorted=true))    print('結果4:',halfsearchtargetnum(test2, 12))    print('結果5:',halfsearchtargetnum(test2, 100))    print('結果6:',halfsearchtargetnum(test2, '12'))    print('結果7:',halfsearchtargetnum(test3, 99))    print('結果8:',halfsearchtargetnum(test4, 12))
呼叫結果

結果1: 結果2: 結果3: 結果4: 結果5: 結果6: 結果7: 結果8:

python3 二分法查詢

二分法查詢 有序列表 掐頭去尾取中間 查詢列表中xx在不在列表中,在,則返回索引值 lst 1,4,6,8,9,21,23,26,35,48,49,54,67,89,99 使用in判斷,不使用二分法 n 49 for i,v in enumerate lst if v n print 找到了,索引為...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...