Algorithm 关于两个数组的中值问题
下面是关于求两个数组中值的算法的伪代码Algorithm 关于两个数组的中值问题,algorithm,Algorithm,下面是关于求两个数组中值的算法的伪代码 T WO -A RRAY-M EDIAN (X, Y ) n ← length[X] £ n also equals length[Y ] median ← F IND -M EDIAN (X, Y, n, 1, n) if median = NOT- FOUND then median ← F IND -M EDIAN (Y, X, n, 1, n) return median F IND -M EDIAN ( A
T WO -A RRAY-M EDIAN (X, Y )
n ← length[X] £ n also equals length[Y ]
median ← F IND -M EDIAN (X, Y, n, 1, n)
if median = NOT- FOUND
then median ← F IND -M EDIAN (Y, X, n, 1, n)
return median
F IND -M EDIAN ( A, B, n, low, high)
if low > high
then return NOT- FOUND
else k ← (low + high)/2
if k = n and A[n] ≤ B[1]
then return A[n]
elseif k < n and B[n − k] ≤ A[k] ≤ B[n − k + 1]
then return A[k]
elseif A[k] > B[n − k + 1]
then return F IND -M EDIAN ( A, B, n, low, k − 1)
else return F IND -M EDIAN ( A, B, n, k + 1, high)
T WO-A RRAY-M EDIAN(X,Y)
N← 长度[X]£n也等于长度[Y]
中值的← F IND-M EDIAN(X,Y,n,1,n)
如果中值=未找到
然后中位数← F IND-M EDIAN(Y,X,n,1,n)
返回中值
F IND-M EDIAN(A、B、n、低、高)
如果低>高
然后返回未找到
埃尔斯克← (低+高)/2
如果k=n和A[n]≤ B[1]
然后返回一个[n]
elseif kB[n− k+1]
然后返回find-median(A,B,n,low,k− 1)
否则返回F IND-M EDIAN(A、B、n、k+1、高)
它来自麻省理工学院的算法介绍
这是我的密码如果我的密码有问题请告诉我
public class findmedian{
public static int find(int []x,int []y){
int median;
int n=x.length;
median=Median( x, y, n,0, n);
if ( median<-100000){
Median(y,x, n,1, n);
}
return median;
}
public static void main(String[]args){
int x[]=new int[]{3,5,7,8,5,9,10};
int y[]=new int[]{12,4,8,9,6,7,10};
find(x,y);
}
public static int Median(int []a,int []b,int n,int low,int high)
{
if ( low>high)
return -1 ;
int k=(low+high)/2;
if (k==n && a[n]<=b[1])
return a[n];
else if ( k<n && b[n-k]<=a[k] && b[n-k]<=b[n-k+1])
return a[k];
else if ( a[k]> b[n-k-1])
return Median( a,b,n,low,k-1);
return Median(a,b,n,k+1,high);
}
}
公共类findmedian{
公共静态int-find(int[]x,int[]y){
整数中值;
int n=x.长度;
中位数=中位数(x,y,n,0,n);
中频(中音高)
返回-1;
int k=(低+高)/2;
如果(k==n&&a[n]
这是错误吗?您需要返回一些内容。(返回类型为int)如果您正确设置代码格式,将更易于阅读和调试
if ( low>high)
return;