python實現二分查找的四種變體

本文用python3實現了二分查找的四種變體。

(一)查找第一個值等於給定值的元素

(二)查找最後一個值等於給定值的元素

(三)查找第一個大於等於給定值的元素

(四)查找最後一個小於等於給定值的元素

 

python3:

(一)查找第一個值等於給定值的元素

def bSearchV1(s, k):
    low = 0
    high = len(s) - 1
    while low <= high:
        mid = low + (high - low) // 2
        if s[mid] > k:
            high = mid - 1
        elif s[mid] < k:
            low = mid + 1
        else:
            if mid == 0 or s[mid - 1] != k:
                return mid
            else:
                high = mid - 1
    return -1

(二)查找最後一個值等於給定值的元素

def bSearchV2(s, k):
    low = 0
    high = len(s) - 1
    while low <= high:
        mid = low + (high - low) // 2
        if s[mid] > k:
            high = mid - 1
        elif s[mid] < k:
            low = mid + 1
        else:
            if mid == len(s) - 1 or s[mid + 1] != k:
                return mid
            else:
                low = mid + 1
    return -1

 

(三)查找第一個大於等於給定值的元素

def bSearchV3(s, k):
    low = 0
    high = len(s) - 1
    while low <= high:
        mid = low + (high - low) // 2
        if s[mid] < k:
            low = mid + 1
        else:
            if mid == 0 or s[mid - 1] < k:
                return mid
            else:
                high = mid - 1
    return -1

 

(四)查找最後一個小於等於給定值的元素

def bSearchV4(s, k):
    low = 0
    high = len(s) - 1
    while low <= high:
        mid = low + (high - low) // 2
        if s[mid] <= k:
            if mid == len(s) - 1 or s[mid + 1] > k:
                return mid
            else:
                low = mid + 1
        else:
            high = mid - 1
    return -1

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