python--二分法查找


二分法查找又称折半查找。二分法查找是在一个有序列表的基础上完成的,要查找的值x和列表的中间值m作比较,如果x大于m,那么接下来从m+1的右区间内再以相同方法取中间值做判断,循环往复此过程,直到判断出x=m的时候就是查找成功。否则相反。返回类型为布尔值

时间复杂度为 O(logn) 空间复杂度:O(1)

两种实现二分法查找的方法:递归、非递归    代码奉上

# 递归实现:                                                       
def binary_seach(alist,item):
    if len(alist) == 0:
        return False
    else:
        mid = len(alist) // 2   # middle 记录中间位置索引
        if item == alist[mid]:  # 如果查找元素与中间位置元素相等 则返回真
            return True
        elif item < alist[mid]:  # 如果查找元素小于中间位置元素,则进行列表切片缩小列表范围
            return binary_seach(alist[:mid],item)
        else:
            return binary_seach(alist[mid+1:],item)
if __name__ == '__main__':
    alist = [5, 10, 15, 18, 35, 55, 65, 75, 99]
    print(binary_seach(alist,200))   # 查找列表中不存在的数据
    print("__________________")
    print(binary_seach(alist,15))     # 查找列表中存在的数据

 

#非递归实现:                                                                                                                   
def binary_seach(alist,item):
    first = 0                                # 起始下标为0 
    last = len(alist) - 1                    # 列表最后一位的索引
    while first <= last:                     # 列表中间位置的索引值
        mid = (first + last) // 2
        if item == alist[mid]:
            return True
        elif item < alist[mid]:
            last = mid -1
        else:
            first = mid + 1
    else:
        return False
if __name__ == '__main__':
    alist = [5,10,15,18,35,55,65,75,99]  # 有序序列
    print(binary_seach(alist, 200))

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM