两大查找(顺序、二分查找)----Python版

基本概念

  1.   查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的全过程.
  2. 列表查找:又叫线性查找:从列表中查找指定元素。
  3. 输入:列表、待查找元素。
  4. 输出:元素下标(为找到元素时一般返回None或),或者是返回查找的元素等等。
  5. 内置列表查找函数:index()  [这是线性查找]

顺序查找(Linear Search)

  •  顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止.(顺序查找相当于for循环查找)
  • 顺序查找的时间复杂度是O(n)

顺序查找代码如下: 

"""
作者:佩大奇
日期:2022/03/05/
描述:这是顺序查找,相当于for循环查找
"""

def linear(li,val):
    for index ,value in enumerate(li):
        #!这里的enumerate是python的内置函数,在字典上是枚举、列举的意思,相当于一个黑箱子,装下列表等等,
        #!用户可以通过for循环定义变量属于这个盒子,通过遍历盒子查找值
        if val==value:
            return index
    return -1

print("请输入列表中的元素,用空格隔开,回车结束:")
li=list(input().split())#键盘输入列表元素,回车结束
for i in range(len(li)):#列表元素转换成int类型
    li[i]=int(li[i])
print("列表li为:")
print(li)

print(linear(li,5))#调用函数查找元素

二分查找(Binary Search)

  • 二分查找:也叫折半查找,从有序列表的初始候选去 li [0:n]开始,通过对待查找的值于候选区中间值的比较,可以使候选去减少一半。 
  • 二分查找的时间复杂度是O(logn)
  • 注意:二分查找的前提是列表是有序列表,否则在查找时会查找失败!

二分查找代码如下:

"""
作者:佩大奇
日期:2022/03/05/
描述:这是二分查找,二分查找的要求是列表必须为有序列表,设置left和right,其中left和right是列表的下标,每一次查找都是折半查找,
     mid=(left+right)/2,要查找的值value大于li[mid]时,说明mid左边是候选区,所以right=mid-1,当value小于li[mid]时,
     说明右边时候选区,所以left=mid+1,当left大于right时,说明查找失败,列表中不存在查找元素。
"""

def binary(li,value):
    left=-1;
    right=len(li)
    while left<=right:
        mid=(left+right)/2
        #或者时  mid=(left+right)//2,这也是取整的办法
        mid=int(mid)
        if li[mid]==value:
            print("查找成功,要查找元素的下标为:")
            print(mid)#因为mid时下标,所以只能时整数,这里用向上取整的方法,e.g:1.5转换为整数就是1,如果时向下取整,那么1.5转换为整数就是2
            print("要查找的元素为:")
            print(li[mid])
            break
        if li[mid]>value:
            right=mid-1
            continue
        if li[mid]<value:
            left=mid+1
            continue
    else:
        print("查找失败!列表中不存在要查找的元素")

print("请输入列表中的元素,用空格隔开:")
li=list(input().split())
for i in range(len(li)):
    li[i]=int(li[i])
print("请输入你要查找的元素:")
val=int(input())
print("列表li为:")
print(li)
print("你要查找的元素为:")
print(val)
print("--------------查找结果----------")
binary(li,val)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9个9青蛙场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值