algorithm - 最小搜索的非递归版本

标签 algorithm pseudocode

A[x,...,y]是整数数组,x,y 是 >= 1 的自然数,并且 x <= y .

Foo(Array,x,y)

if (x=y): return Array[x]

else: 
    m=(x+y)/2 
    return min(Foo(Array,x,m), Foo(Array(m+1),y)

我正在尝试找出如何编写这段代码的非递归版本,以在未排序的数组中找到最小值。

我试过使用 while 循环 where (x != y) 但我无法弄清楚如何移动 m 直到它到达 x = y 的位置并终止并返回最小值。我也想知道是否可以在不弹出 m 和 m+1 的最大值的情况下完成

最佳答案

如果你想找到一根棍子的质心(你可以用一根手指平衡它的点),只需用两根手指将它举起来,然后慢慢地一起移动。

类似的方法适用于查找数组中的最小元素:

findMin(Arr,x,y):

    while(x < y):
        if (Arr[x] < Arr[y])
            y-=1
        else
            x+=1

    return Arr[x]

关于algorithm - 最小搜索的非递归版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349522/

相关文章:

dart - 如何生成唯一的、可预测的、可重复的、非连续的字母数字标识符?

algorithm - 有向图 - 构建交叉边集

algorithm - 用伪代码编写算法

algorithm - 从具有 x、y 和 z 坐标的点生成网格

java - 使用Gauss-Legendre算法在java中逼近Pi

python - 如何在没有 itertools.combinations 的情况下在 Python 中生成列表的递增排列

algorithm - kruskal 算法的性能如何受到不相交集数据结构的影响?

python - 列表列表的排列

javascript - 由特定函数定义的 Mandelbrot 集

c++ - Levenshtein Edit Distance 不计算编辑距离