zoukankan      html  css  js  c++  java
  • python---二分查找的实现

    
    from cal_time import get_running_time
    
    
    @get_running_time
    def bin_search(li, val):
        """
        二分查找
    
        :param li: 要查找的有序列表
        :param val: 要查找的值
        :return:
        """
    
        n = len(li)
        low = 0
        high = n - 1
    
        while low <= high:
            mid = (low + high) // 2
            if li[mid] == val:
                return mid
            elif li[mid] > val:
                high = mid - 1
            else:
                low = mid + 1
        return -1
    
    
    def bin_search_rec(li, val, low, high):
    """
        二分查找递归版
        
        :param li: 要查找的列表
        :param val: 要查找的值
        :param low: 候选区域起始位置
        :param high: 候选区域结束位置
        :return: 
        """
    
        if low <= high:
    
            mid = (low + high) // 2
    
            if li[mid] == val:
                return mid
            elif li[mid] > val:
                return bin_search_rec(li, val, low, mid-1)
            else:
                return bin_search_rec(li, val, mid+1, high)
    
        return -1
    
    
    @get_running_time
    def b_search_r(li, val, low, high):
        return bin_search_rec(li, val, low, high)
    
    
    作者:凯旋.Lau
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    微信支付
    设计模式
    微信,根据经纬度获取当前城市
    移动端下拉刷新
    angular-seed — AngularJS种子项目
    Send Email
    angularjs 控制器
    ajax 图片上传
    Jpeg-Baseline和Progressive JPEG的区别
    QT启动一个工程
  • 原文地址:https://www.cnblogs.com/KX-Lau/p/12518223.html
Copyright © 2011-2022 走看看