Python中的两个查找算法—线性查找和二分查找

什么叫查找

查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程
列表查找(线性表查找):从列表中查找指定元素
    输入:列表、待查找元素
    输出:元素下表(未找到元素时一般返回None或-1)
内置列表查找函数:index()

顺序查找(Linea Search)
顺序查找:也叫作线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止

1.顺序查找(Linea Search)

#顺序查找代码
def linear_search(li, val):
    for index, value in enumerate(li):
        if value == val:
            return index
    else:
        return None
时间复杂度为O(n)
顺序查找是把列表从头到尾查找一遍,最多找n次

2.二分查找(Binary Search)

#二分查找需要事先排序
def binary_search(li, val):
    left = 0
    right = len(li) - 1
    while left <= right:      #候选区有值
        mid = (left + right) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:   #待查找的值在mid左侧
            right = mid - 1
        else:  #li[mid]<val   待查找的值在mid右边侧
            left = mid + 1
    else:
        return None

li = [1,2,3,4,5,6,7,8,9]
print(binary_search(li, 3))
二分查找的复杂度O(logn)

补充

列表的内置函数index()实现的是线性查找方式,二分查找要求列表必须是有序列表,二分查找速度快,但是必须排序。排序的时间复杂度大于O(n)。

需要查找时,若实现有序则优先使用二分查找,无序则要考虑排序。若排序后查找次数很少,则不如使用线性查找(因为要考虑排序时间),但是若要多次使用查找,则可以先排序。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python查找算法包括二分查找算法线性查找算法二分查找算法是一种高效的查找算法,它的前提条件是数据必须有序。该算法通过将当前列表不断分成两部分,然后跟踪最低和最高的两个索引,直到找到目标值为止。二分查找算法Python代码如下: ```python def binary_search(list, item): first = 0 last = len(list) - 1 found = False while first <= last and not found: midpoint = (first + last) // 2 if list[midpoint == item: found = True else: if item < list[midpoint]: last = midpoint - 1 else: first = midpoint + 1 return found ``` 线性查找算法是一种简单直接的查找算法,它逐个匹配数据元素,直到找到目标值或遍历完整个列表。线性查找算法Python代码如下: ```python def linear_search(list, item): index = 0 found = False while index < len(list) and not found: if list[index == item: found = True else: index += 1 return found ``` 这两种算法都可以用于在列表查找特定的元素,但二分查找算法在有序数据上的查找效率更高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [手把手教你用Python实现查找算法](https://blog.csdn.net/zw0Pi8G5C1x/article/details/121881880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值