如何用 *c++* 来实现这个递归求最大最小值的算法算法!!!求助!!
procedure MAXMIN(i,j,fmax,fmin)
integer i,j;global n,A(1:n)
case
:i=j;fmax <--fmin <--A(i)
:i=j-1; if A(i) <A(j) then fmax <--A(j);fmin <--A(i)
else fmax <--A(i);fmin <--A(j)
endif
:else:min <--|_(i+j)/2_|(向下取正就是(1+4)/2=2)
call MAXMIN(i,mid,gmax,gmin) //这里就是调用
call MAXMIN(min+1,j,hmax,hmin)
fmax <--max(gmax,hmax)
fmin <--min(gmin,hmin)
endcase
end MAXMIN
希望你们不要嫌麻烦!认真看完呀!谢谢了!
我就是想知道如何用c++ 来实现这个算法!!
[解决办法]
寒,这个函数是递归求最大最小值的...
用来排序的话就很奇怪了~
楼上的能输入,或者给那十个数的使用,程序见下
#include <stdio.h>
// ============================================================================
// ==============================================================================
int max(int a, int b)
{
return a > b ? a : b;
}
// ============================================================================
// ==============================================================================
int min(int a, int b)
{
return a < b ? a : b;
}
const int n = 256;
int A[n] = { 2, 6, 5, 4, 12, 45, 47, 2, 1, 8 };
// ============================================================================
// ==============================================================================
void MAXMIN(int i, int j, int &fmax, int &fmin)
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int mid, gmin, gmax, hmin, hmax;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (i == j) {
fmax = fmin = A[i];
} else if (i == j - 1) {
if (A[i] < A[j]) {
fmax = A[j];
fmin = A[i];
} else {
fmax = A[i];
fmin = A[j];
}
} else {
mid = (i + j) / 2;
MAXMIN(i, mid, gmax, gmin);
MAXMIN(mid + 1, j, hmax, hmin);
fmax = max(gmax, hmax);
fmin = min(gmin, hmin);
}
}
// ============================================================================
// ==============================================================================
int main()
{
//~~~~~~~~~~~
int nMax, nMin;
int i, nCount;
//~~~~~~~~~~~
MAXMIN(0, 9, nMax, nMin);
printf( " Max %d\n Min %d\n ", nMax, nMin);
while (scanf( "%d ", &nCount) != EOF) {
for (i = 0; i < nCount; i++) {
scanf( "%d ", &A[i]);
}
if (!nCount) {
continue;
}
MAXMIN(0, nCount - 1, nMax, nMin);
printf( " Max %d\n Min %d\n ", nMax, nMin);
}
return 0;
}