python实现静态列表二分查找与插值查找

编程入门 行业动态 更新时间:2024-10-28 05:22:16

二分查找:二分查找这个概念是非常简单的一个算法,也就是我们俗称的折半查找,原理是在一个有序的数组中,先取中间的值,
如果中间值大于或者小于我们需要查找的值,那么就舍弃一般,在另一半中进行查找.
"""
说明:对已经排好序列的列表数据进行查找
函数:二分查找
参数:list key
返回值:mid(所要查找到数据所在的序列) times(查找次数)

"""
def binary_search(list,key):length = len(list)low = 0
    heigth = length -1
    time = 0
    while low <= heigth:time += 1
        mid = int((low + heigth) / 2)if key > list[mid]:low = mid + 1
        elif key <list[mid]:heigth = mid - 1
        else:print("times: %s" % time)return midif __name__ =='__main__':LIST = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]result = binary_search(LIST, 99)print(result)

运行结果:

插值查找:

这种方式的查找其实是将值构造成了一颗二叉排序数,然后进行查找.这种搜索的好处在于大大的缩短了搜索时间,时间复杂度为logn  小于线性的n

而插值查找则比较灵活,并不是简单的从中间进行的,它是根据我们需要查询的值的渐进进行搜索的.

插值查找的不同点在于每一次并不是从中间切分,而是根据离所求值的距离进行搜索的.

"""
说明:对已经排好序列的列表数据进行查找
函数:插值查找
参数:list key
返回值:mid(所要查找到数据所在的序列) times(查找次数)

"""
def binary_search(list,key):length = len(list)low = 0
    heigth = length -1
    time = 0
    while low <= heigth:time += 1
        mid = low + int((heigth - low) * (key - list[low])/(list[heigth] - list[low]))if key > list[mid]:low = mid + 1
        elif key <list[mid]:heigth = mid - 1
        else:print("times: %s" % time)return midif __name__ =='__main__':LIST = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]result = binary_search(LIST, 444)print(result)

运行结果:


更多推荐

静态,插值,列表,python

本文发布于:2023-05-27 16:56:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/300550.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:静态   插值   列表   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!