• 二分查找


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

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

      适用条件:

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

        最优时间复杂度: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')
  • 相关阅读:
    Java 网络编程:(四)通信要素2:网络协议
    Java 网络编程:(三)通信要素1:IP和端口号
    Java 网络编程:(二)网络编程&网络通信
    学习进度条35
    学习进度条34
    学习进度条33
    学习进度条32
    学习进度条31
    学习进度条30
    学习进度条29
  • 原文地址:https://www.cnblogs.com/ExMan/p/14554794.html
Copyright © 2020-2023  润新知