我想知道这个伪代码是否递归且正确地找到了数组的最小值和最大值。
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
可以吗?
答案 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)