最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python二分查找搜索算法的多種實現(xiàn)方法

 更新時間:2024年03月06日 14:50:25   作者:星星貓  
二分查找,也稱折半查找,是一種效率較高的查找方法,本文主要介紹了python二分查找搜索算法的多種實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下

二分查找搜索算法利用了元素集合,這些元素在一次比較后就忽略了一半的元素,從而進行了排序。

  • 將 x 與中間元素進行比較。
  • 如果 x 與中間元素匹配,則返回中間索引。
  • 否則,如果 x 大于 mid 元素,則 x 只能位于 mid 元素之后的右(大)半子數(shù)組中。然后,我們再次將該算法應(yīng)用于右半部分。
  • 否則,如果 x 較小,則目標(biāo) x 必須位于左(下)半部分。因此,我們將算法應(yīng)用于左半部分。

使用遞歸進行二分查找搜索

# Python 3 program for recursive binary search.
# Modifications needed for the older Python 2 are found in comments.

# Returns index of x in arr if present, else -1
def binary_search(arr, low, high, x):

    # Check base case
    if high >= low:

        mid = (high + low) // 2

        # If element is present at the middle itself
        if arr[mid] == x:
            return mid

        # If element is smaller than mid, then it can only
        # be present in left subarray
        elif arr[mid] > x:
            return binary_search(arr, low, mid - 1, x)

        # Else the element can only be present in right subarray
        else:
            return binary_search(arr, mid + 1, high, x)

    else:
        # Element is not present in the array
        return -1

# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10

# Function call
result = binary_search(arr, 0, len(arr)-1, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

輸出

Element is present at index 3

使用迭代進行搜索

# Iterative Binary Search Function
# It returns index of x in given array arr if present,
# else returns -1
def binary_search(arr, x):
    low = 0
    high = len(arr) - 1
    mid = 0

    while low <= high:

        mid = (high + low) // 2

        # If x is greater, ignore left half
        if arr[mid] < x:
            low = mid + 1

        # If x is smaller, ignore right half
        elif arr[mid] > x:
            high = mid - 1

        # means x is present at mid
        else:
            return mid

    # If we reach here, then the element was not present
    return -1


# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10

# Function call
result = binary_search(arr, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

輸出

Element is present at index 3

使用內(nèi)置 bisect 模塊

循序漸進的方法:

  • 該代碼導(dǎo)入 bisect 模塊,該模塊提供對二進制搜索的支持。
  • 定義了 binary_search_bisect() 函數(shù),該函數(shù)將數(shù)組 arr 和搜索 x 的元素作為輸入。
  • 該函數(shù)調(diào)用 bisect 模塊的 bisect_left() 函數(shù),該函數(shù)在排序數(shù)組 arr 中查找元素的位置,其中應(yīng)插入 x 以保持排序順序。如果該元素已存在于數(shù)組中,則此函數(shù)將返回其位置。
  • 然后,該函數(shù)檢查返回的索引 i 是否在數(shù)組范圍內(nèi),以及該索引處的元素是否等于 x。
  • 如果條件為 true,則該函數(shù)返回索引 i 作為元素在數(shù)組中的位置。
  • 如果條件為 false,則該函數(shù)返回 -1,指示該元素不存在于數(shù)組中。
  • 然后,代碼定義一個數(shù)組 arr 和一個要搜索的元素 x。
  • 使用 arr 和 x 作為輸入調(diào)用 binary_search_bisect() 函數(shù),返回的結(jié)果存儲在 result 變量中。
  • 然后,代碼檢查結(jié)果是否不等于 -1,指示該元素存在于數(shù)組中。如果為 true,則打印元素在數(shù)組中的位置。
  • 如果結(jié)果等于 -1,則代碼將打印一條消息,指出該元素在數(shù)組中不存在。
import bisect

def binary_search_bisect(arr, x):
    i = bisect.bisect_left(arr, x)
    if i != len(arr) and arr[i] == x:
        return i
    else:
        return -1


# Test array
arr = [2, 3, 4, 10, 40]
x = 10

# Function call
result = binary_search_bisect(arr, x)

if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")

輸出

Element is present at index 3

到此這篇關(guān)于python二分查找搜索算法的多種實現(xiàn)方法的文章就介紹到這了,更多相關(guān)python二分查找搜索算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable解決辦法

    Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable解決

    這篇文章主要給大家介紹了關(guān)于Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable的解決辦法,TypeError是Python中的一種錯誤,表示操作或函數(shù)應(yīng)用于不合適類型的對象時發(fā)生,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Python基于template實現(xiàn)字符串替換

    Python基于template實現(xiàn)字符串替換

    這篇文章主要介紹了Python基于template實現(xiàn)字符串替換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python遠(yuǎn)程控制Windows服務(wù)器的方法詳解

    Python遠(yuǎn)程控制Windows服務(wù)器的方法詳解

    在很多企業(yè)會使用閑置的 Windows 機器作為臨時服務(wù)器,有時候我們想遠(yuǎn)程調(diào)用里面的程序或查看日志文件。本文分享了利用Python遠(yuǎn)程控制Windows服務(wù)器的方法,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • python實現(xiàn)每天定時發(fā)送郵件的流程步驟

    python實現(xiàn)每天定時發(fā)送郵件的流程步驟

    這篇文章主要介紹了python實現(xiàn)每天定時發(fā)送郵件的流程步驟,要編寫一個用于自動發(fā)送每日電子郵件報告的 Python 腳本,并配置它在每天的特定時間發(fā)送電子郵件,文中給大家介紹了詳細(xì)步驟和示例代碼,需要的朋友可以參考下
    2024-08-08
  • python中的break、continue、exit()、pass全面解析

    python中的break、continue、exit()、pass全面解析

    下面小編就為大家?guī)硪黄猵ython中的break、continue、exit()、pass全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 利用python操作SQLite數(shù)據(jù)庫及文件操作詳解

    利用python操作SQLite數(shù)據(jù)庫及文件操作詳解

    這篇文章主要給大家介紹了關(guān)于利用python操作SQLite數(shù)據(jù)庫及文件操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 如何使用Python控制攝像頭錄制視頻

    如何使用Python控制攝像頭錄制視頻

    這篇文章主要介紹了如何使用Python控制攝像頭錄制視頻,實現(xiàn)過程需要用到三個庫tkinter庫、PIL庫、cv2庫,下面將內(nèi)容詳細(xì)的一步一步實現(xiàn),希望對你有所啟發(fā)并能做一個屬于自己的攝像頭控制程序
    2022-03-03
  • python版單鏈表反轉(zhuǎn)

    python版單鏈表反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了python版單鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Pycharm配置opencv與numpy的實現(xiàn)

    Pycharm配置opencv與numpy的實現(xiàn)

    本文總結(jié)了兩種方法來導(dǎo)入opencv與numpy包,第一種是直接在Pycharm中導(dǎo)入兩個包,第二種是在官網(wǎng)下載相關(guān)文件進行配置,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Python二維碼生成庫qrcode安裝和使用示例

    Python二維碼生成庫qrcode安裝和使用示例

    這篇文章主要介紹了Python二維碼生成庫qrcode安裝和使用示例,本文講解了qrcode的安裝、生成二維碼、生成帶圖標(biāo)的二維碼等內(nèi)容,需要的朋友可以參考下
    2014-12-12

最新評論

涟水县| 长宁区| 永清县| 双辽市| 威信县| 关岭| 广安市| 潼关县| 海口市| 抚顺县| 抚顺县| 星子县| 女性| 溧阳市| 武山县| 澄迈县| 荥经县| 汉沽区| 奇台县| 娱乐| 揭东县| 大丰市| 万全县| 米林县| 富民县| 富源县| 博罗县| 田阳县| 金溪县| 晋江市| 岱山县| 沈阳市| 临夏市| 凯里市| 绍兴县| 班玛县| 庆安县| 祥云县| 尉氏县| 丹凤县| 利川市|