zoukankan      html  css  js  c++  java
  • 在有序数组中查找某一特定元素的索引

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

    实例:

    def binarySearch(alist, item):
        """
        二分查找
        :param alist: alist是一个有序序列,
        :param item: item是我们要在alist中查找的元素
        :return: int
        """
        def binarySearch(alist, item):
        low, high = 0, len(alist) - 1
    
        while low <= high:
            mid = (low + high) // 2  # 中间元素的下标
    
            if item < alist[mid]:  # 查找的元素<中间元素,查找的元素存在中间元素左侧
                # 将中间元素左侧序列作为一个新的序列,然后再基于item和当前新序列的中间值进行大小比较
                high = mid - 1
            elif item > alist[mid]:  # 查找的元素存在于中间元素右侧
                low = mid + 1   # low和high就可以表示中间元素右侧的子序列
    
            else:   # 查找的元素就是中间元素
                return mid
    
        # 差不多就抛错
        raise ValueError(f'{item} is not in list')
    
    
    print(binarySearch([0, 1, 2, 3], 4))
    
    
  • 相关阅读:
    【2-26】string/math/datetime类的定义及其应用
    聚合函数,数学函数,字符串函数,时间日期函数
    数据库备份,还原,分离与附加
    SQL数据库增删改查
    form表单验证和事件、正则表达式
    悬浮动态分层导航
    图片轮播
    marquee标签
    Window.document对象
    Window.document对象
  • 原文地址:https://www.cnblogs.com/ghh520/p/15008794.html
Copyright © 2011-2022 走看看