Python实现查找

本文详细介绍了查找算法中的两种重要方法:折半查找和散列表。折半查找是一种在有序列表中高效查找的方法,查找时间复杂度为logn。散列表则是通过哈希函数实现快速查找,但需解决冲突问题,如开放定址法和链地址法。文章还探讨了哈希函数的构造方法和冲突解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查找算法经常出现在笔试中,掌握基础的查找算法非常重要。

1. 折半查找(非常重要)

概念

折半查找要求线性表是有序的
折半查找的基本思路:设R[low,…,high]是当前查找区间,首先确定该区间的中间位置,mid=(low+high)/2;然后将待查的k值与R[mid]比较,若相等,则查找成功,并返回该位置,否则需确定新的查找区间。若R[mid]>k,则又表有序性,确认该记录必定是在mid左边的子表R[low,…,mid-1],类似的,若R[mid]<k,则记录在mid右边的子表R[mid+1,…,high]中。递归处理新区间,直到子区间长度小于1是时查找结束。

实现



def bsearch(R, k):
    """
    折半查找的实现
    :param R: 有序数组
    :param k:  关键字
    :return:  如果找到返回下标,否则返回-1
    """
    low = 0
    high = len(R) - 1
    while low <= high:
        mid = (low + high) // 2
        if R[mid] == k:
            return mid
        elif R[mid] > k:
            high = mid - 1
        else:
            low = mid + 1
    return -1


if __name__ == '__main__':
    user_input1 = input('请输入数组","隔开:\n').strip()
    sorted = [int(item) for item in user_input1.split(',')]
    user_input2 = input('请输入要查询的数字:\n').strip()
    k = int(user_input2)
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值