Python基础查找算法

简介: Python基础查找算法

一  顺序查找


1 在列表中顺序查找特定的值key,如果找到返回该值在列表中的索引号,如果没有找到返回“不存在”


def sequential_search(lst, key):
    length = len(lst)
    for i in range(length):
        if lst[i] == key:
            return i
    else:
        return "不存在"
def main():
    alist = [5,3,7,2,12,45,16,23]       #测试列表
    print("所要查找的元素的位置是:",sequential_search(alist, 12)) #查找数据12
    print("所要查找的元素的位置是:",sequential_search(alist, 36)) #查找数据36
main()  #调用main函数

运行结果:

image.png



2 在列表中顺序查找最大值和最小值。


def max_min(lst):
    max = min = lst[0]
    for i in range(len(lst)):
        if lst[i] > max:
            max = lst[i]
        if lst[i]< min:
            min = lst[i]
    return (max,min)
def main():
    alist = [5,3,7,2,12,45,16,23]       #测试列表
    print("列表中元素的(最大值,最小值)=",max_min(alist)) #查找列表的最大值最小值
main()

运行结果:

image.png



二  二分查找  


1 针对有序表的二分查找,非递归实现。


def binary_search(lst, key):
    low = 0                    #左边界
    high = len(lst) - 1        #右边界
    time = 0                   #记录查找次数
    while low <= high:           #左边界小于等于右边界,则循环
        time += 1
        mid = (low + high)//2
        if  lst[mid]>key:        #中间位置元素大于要查找的值
            high = mid - 1
        elif lst[mid]<key:
            low = mid + 1
        else:
            print("折半查找的次数: %d" % time)
            print("所要查找的值在列表中的索引号是:", end='')
            return mid
    print("折半查找的次数: %d" % time)
    return '未找到'         #查找不成功,'未找到'
def main():
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    result = binary_search(alist, 13)
    print(result)
main()

运行结果:

image.png



2 针对有序表二分查找,递归实现。


def binary_search(lst, low, high, key):
    mid = int((low + high)/2)
    if high < low:
        return False
    elif lst[mid]==key:
        print("所要查找的值在列表中的索引号是:", end='')
        return mid
    elif lst[mid]> key:
        high = mid - 1
        return binary_search(lst, low, high, key)
    else:
        low = mid + 1
        return binary_search(lst, low, high, key)
if __name__=="__main__" :
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    low = 0
    high = len(alist) - 1
    result = binary_search(alist, 0, high, 21)
    print(result)

运行结果:


image.png


三 插值查找


插值查找是在二分查找的基础上改进,二分查找中分点的计算公式:mid=(low+high)/2,即 mid=low+1/2*(high-low)


插值查找改进为:mid=low+(key-lst[low])/(lst[high]-lst[low])*(high-low)


插值查找代码的实现:


def interpolation_search(lst, low, high, key):
    time = 0   #用来记录查找次数
    while low < high:
        time += 1
        # 计算mid值是插值算法的核心代码
        mid = low + int((high - low) * (key - lst[low])/(lst[high] - lst[low]))
        print("mid={0}, low={1}, high={2}".format(mid, low, high))
        if lst[mid] > key:
            high = mid - 1
        elif lst[mid] < key:
            low = mid + 1
        else:
            print("插值查找%s的次数:%s"%(key, time))  #打印插值查找的次数
            return mid
    print("插值查找%s的次数:%s"%(key, time))
    return False
def main():
    alist = [5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92]
    low = 0
    high = len(alist) - 1
    interpolation_search(alist, low, high, 13)
main()

运行结果:

image.png



四 总结:


这是用python实现基础的查找算法,每个算法的复杂度不同,运行效率也不同,由于时间问题没有仔细给出每个算法的复杂度,如果有兴趣的小伙伴可以去自己试一试每个算法的复杂度。



目录
相关文章
|
27天前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
1月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
109 5
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
173 26
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
161 0
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
200 0
|
2月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
283 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
406 4
|
2月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
225 3
|
2月前
|
算法 机器人 定位技术
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
140 4
机器学习/深度学习 算法 自动驾驶
431 0

推荐镜像

更多