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

      二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好  

      二分查找即搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果中间元素大于或小于要查找元素,则在小于或大于中间元素的那一半进行搜索,而且跟开始一样从中间元素开始比较. 如果在某一步骤数组为空,则代表找不到.这种算法每一次比较都会使搜索范围缩小一半.

      适用条件:

        二分查找是有条件的,首先是有序的,其次因为二分查找操作的是下标,所以要求是顺序

        最优时间复杂度:O(1), 最坏时间复杂度:O(logn)

    下面我们假设数组是升序的情况下写二分查找:

    复制代码
    def binary_chop(alist, data):
        """
        非递归解决二分查找
        """
        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
    
    def binary_chop2(alist, data):
        """
        递归解决二分查找
        """
        n = len(alist)
        if n < 1:
            return False
        mid = n // 2
        if alist[mid] > data:
            return binary_chop2(alist[0:mid], data)
        elif alist[mid] < data:
            return binary_chop2(alist[mid+1:], data)
        else:
            return True
    
    if __name__ == "__main__":
        lis = [2,4, 5, 12, 14, 23]
        if binary_chop(lis, 12):
            print('ok')
        else:
            print('false')
  • 相关阅读:
    实验四 Android开发基础
    20135322实验五实验报告
    Eclipse中Ant的配置与测试
    实验三 敏捷开发与XP实践
    实验二 Java面向对象程序设计
    Java实验报告一:Java开发环境的熟悉
    简单四则运算
    个人介绍
    团队冲刺第一阶段个人工作总结2
    团队冲刺第一阶段个人工作总结1
  • 原文地址:https://www.cnblogs.com/ExMan/p/14554794.html
Copyright © 2011-2022 走看看