• 二分查找、折半查找(binary search)


    二分查找的原理

    • 1、首先找到列表中排在中间的元素,比较目标元素与该元素的大小,如果中间的元素等于目标元素,则返回对应的下标索引index,否则返回-1

    • 2、如果目标元素比该元素大,则在中间元素与最后一个元素之间重复步骤1

    • 3、如果目标元素比该元素小,则在中间元素与第一个元素之间重复步骤1

    代码:

    # 入参定义列表lis、起始索引left、终止索引right、查找元素num
    def binary_search(lis, left, right, num):
        
        if left > right: #递归结束条件
            return -1  # 返回-1表示元素没有在列表中
        mid = (left + right) // 2 #获取中间mid索引
        if num < lis[mid]: # 判断中间索引对应的value 是否 小于要查找的值,
            right = mid -1 # 若小于,起始索引不变,终止索引right = mid-1 取前部分列表的最后的索引值
        elif num > lis[mid]: 
            left = mid + 1 # 若大于,起始索引取后部分列表的首位索引值,终止索引不变
        else:
            return mid # 中间值刚好等要查找的值,返回mid索引
        return binary_search(lis, left, right, num)
        #这里之所以会有return是因为必须要接收值,不然返回None
        #回溯到最后一层的时候,如果没有return,那么将会返回None
    
    list_item = [1,3,5,7,9,23,43,57,58,60,76,89,100]
    
    index = binary_search(list_item,0,len(list_item)-1,2)
    print("{0},{1}".format(index,list_item[index]))
    
    
  • 相关阅读:
    组合和封装
    面向对象之继承与派生
    实例化产生对象和绑定关系
    面向对象程序设计和类
    常用模块(hashlib、suprocess、configparser)
    常用模块re模块(正则表达式)
    包及常用模块(time、datetime、random、sys)
    python内置函数大全
    软件开发规范及常用模块
    [NOI Online 提高组]序列 (并查集+二分图判定)
  • 原文地址:https://www.cnblogs.com/yangsun/p/12727327.html
Copyright © 2020-2023  润新知