python基础算法题:二分查找

1、题目:已知正序排列数组,寻找某一位数字所在的位置

2、解题思路

  • 数组至少有一个元素,否则无需循环,while right>=left
  • 三种场景
    • 中间值=目标值,直接返回middle
    • 中间值
    • 中间值>目标值,目标值在左二分之一,right=middle+1

3、代码实现

def middle_search(data,val):
    left = 0
    right = len(data)-1
    while right >= left:
        middle = (left+right)//2
        if data[middle] == val:
            return middle
        elif data[middle] > val:
            right = middle-1
        elif data[middle] < val:
            left = middle+1

4、时间复杂度:O(logn)

5、测试用例设计

data=[1,2,3,4,5,6,7]
data1 = []
data2 = [2]
result = middle_search(data,4)
result1 = middle_search(data,2)
result2 = middle_search(data,6)
result3 = middle_search(data1,2)
result4 = middle_search(data2,2)
print('中间值=目标值:',result)
print('中间值>目标值:',result1)
print('中间值<目标值:',result2)
print('无元素:',result3)
print('仅有一个元素:',result4)

测试用例结果

中间值=目标值: 3
中间值>目标值: 1
中间值<目标值: 5
无元素: None
仅有一个元素: 0

你可能感兴趣的:(python专栏,python,算法,开发语言)