递归地在数组伪代码中找到max和min

时间:2014-12-03 10:36:37

标签: arrays algorithm pseudocode

我想知道这个伪代码是否递归且正确地找到了数组的最小值和最大值。

MinMax(A, max, min)
if (|A| == 1)
    if (max < A[1])
        max = A[1]
    if (min > A[1])
        min = A[1]
    return A
Aleft = MinMax(l, max, min)
Aright = MinMax(r, max, min)
Aall = Merge(Aleft, Aright)
return min,max

可以吗?

1 个答案:

答案 0 :(得分:1)

不,不行。

使用l和r但未定义。 两个回报是不同的 合并有什么作用?

也许你的意思是

MinMax(A, max, min)
    if (|A| == 1)
        if (max < A[1])
            max = A[1]
        if (min > A[1])
            min = A[1]
        return (min,max)
    mid=|A|/2
    l=A[:mib-1]
    r=A[mid:]
    (min,max) = MinMax(l, max, min)
    (min,max) = MinMax(r, max, min)
    return (min,max)

但合并业务表明您可能正在寻找一种多线程解决方案。

MinMax(A, max, min)
    if (|A| == 1)
        if (max < A[1])
            max = A[1]
        if (min > A[1])
            min = A[1]
        return (min,max)
    mid=|A|/2
    l=A[:mib-1]
    r=A[mid:]
    (lmin,lmax) = MinMax(l, max, min)
    (rmin,rmax) = MinMax(r, max, min)
    if lmin < rmin 
        rmin=lmin
    if lmax > rmax
        rmax=lmax
    return (rmin,rmax)