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

    原理

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

    实现

    """
    1. 二分查找是有条件的,首先是有序,其次因为二分查找操作的是下标,所以要求是顺序表
    2. 最优时间复杂度:O(1)
    3. 最坏时间复杂度:O(logn)
    """
    
    # def binary_chop(alist, data):
    #     """
    #     递归解决二分查找
    #     :param alist:
    #     :return:
    #     """
    #     n = len(alist)
    #     if n < 1:
    #         return False
    #     mid = n // 2
    #     if alist[mid] > data:
    #         return binary_chop(alist[0:mid], data)
    #     elif alist[mid] < data:
    #         return binary_chop(alist[mid+1:], data)
    #     else:
    #         return True
    
    def binary_chop(alist, data):
        """
        非递归解决二分查找
        :param alist:
        :return:
        """
        n = len(alist)
        first = 0
        last = n - 1
        while first <= last:
            mid = (last + first) // 2
            if alist[mid] > data:
                last = mid - 1
            elif alist[mid] < data:
                first = mid + 1
            else:
                return True
        return False
    
    if __name__ == '__main__':
        lis = [2,4, 5, 12, 14, 23]
        if binary_chop(lis, 14):
            print('ok')
    
  • 相关阅读:
    决策树
    训练/测试
    机器学习 标准差
    pandas01
    提交参数说明
    pandas_series02
    Yarn 模式
    词云图
    软件需求与分析课堂综合测试
    课堂测试10
  • 原文地址:https://www.cnblogs.com/longyunfeigu/p/9316082.html
Copyright © 2011-2022 走看看