本文用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