Engee 文档
Notebook

二进制搜索算法

在Julia编程语言中实现二进制搜索算法的一个例子,旨在搜索排序数组中的给定元素。

导言

二进制搜索是一种高效的算法,用于搜索排序数组中的元素。 基本思想是在每一步将数组分成两半,并将所需的元素与中间的元素进行比较。 与线性搜索相比,这使您可以显着减少操作次数。 该算法具有时间复杂度 这使得它非常快的大量数据。

该算法解决了在有序数据集中搜索特定值的问题。 它广泛应用于计算机科学,数据库,排序算法和其他需要快速元素搜索的领域。

主要部分

函数和参数的定义

功能 binarysearch 接受已排序的向量 lst 和期望的值 val. 该函数由类型参数化 T,它允许您使用任何类型的数据

In [ ]:
function binarysearch(lst::Vector{T}, val::T) where T
    # 初始化搜索的下限
    low = 1
    # 初始化搜索的上限(数组长度)
    high = length(lst)
    
    # #主搜索周期
    
    # 我们继续搜索,直到下限超过上限。
    while low  high
        # 我们找到当前范围的中间
        # ÷运算符执行整数除法
        mid = (low + high) ÷ 2
        
        # 将中间的元素与所需值进行比较
        if lst[mid] > val
            # 如果中间的元素大于您要查找的元素,
            # 将上边框移到中间前面的位置
            high = mid - 1
        elseif lst[mid] < val
            # 如果中间的元素小于您要查找的元素,
            # 我们将下边框移动到中间后的位置
            low = mid + 1
        else
            # 如果中间的元素等于您要查找的元素,
            # 返回找到的元素的索引
            return mid
        end
    end

    # #处理找不到元素时的情况

    # 如果我们不在循环中,则找不到元素。
    # 我们返回0作为缺少元素的标志。
    # (在Julia中,索引从1开始,因此0不是有效的索引)
    return 0
end
Out[0]:
binarysearch

使用函数的示例

创建用于测试的排序数组

In [ ]:
test_array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
In [ ]:
# 寻找现有元素
result1 = binarysearch(test_array, 7)
println("搜索项目7:index=resul result1")  # 它应该返回4

# 寻找一个不存在的元素
result2 = binarysearch(test_array, 6)
println("搜索项目6:index=resul result2")  # 它应该返回0

# 寻找第一个元素
result3 = binarysearch(test_array, 1)
println("搜索项目1:index=resul result3")  # 它应该返回1

# 寻找最后一个元素
result4 = binarysearch(test_array, 19)
println("搜索项目19:index=resul result4")  # 它应该返回10
Поиск элемента 7: индекс = 4
Поиск элемента 6: индекс = 0
Поиск элемента 1: индекс = 1
Поиск элемента 19: индекс = 10

结论

在这个例子中,我们看了Julia二进制搜索算法的实现。 我们已经设法创建了一个高效的函数,可以快速找到排序数组中的元素。 该算法使用"分而治之"的原则,这允许实现对数时间复杂度。 . 这在处理大量数据时尤其重要,因为线性搜索效率低下。 该实现支持泛型,这使得它可以灵活地处理不同的数据类型,前提是它们支持比较操作。

该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Binary_search