zoukankan      html  css  js  c++  java
  • 二分查找、折半查找(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]))
    
    
  • 相关阅读:
    本周学习进度条2
    web—图表表示数据库中的数据
    Intern Day36
    计算机网络
    面试
    C++
    计算机网络
    腾讯PC客户端开发暑期实习一面
    TCP和UDP
    Intern Day34
  • 原文地址:https://www.cnblogs.com/yangsun/p/12727327.html
Copyright © 2011-2022 走看看