已知两个有序数组A和B(升序)

要求:数组C=AuB;已知A和B中元素的个数,分别为LenA和LenB,输出两个原数组且输出最后合并的结果数组。

第1个回答  2013-05-01
给一个C语言的函数吧

void AUB(int a[], int b[], int len1, int len2){
//len1:a的长度, 也可以用strlen(a)来求,b同理
int i,j,pos=0;
int c[len1+len2];//长度暂时取两者长度之和

for(i = 0, j = 0; i < len1 && j < len2; pos++){
if(a[i] < b[j])
c[pos] = a[i++];
else
c[pos] = b[j++];
}
//至此a,b中有一个数组已经全都复制到c了
for(;i < len1; i++)
c[pos++] = a[i];
for(;j < len2; j++)
c[pos++] = b[j];

//最后把abc三个数组打出来就行了,这里只举a的例子,c的长度为pos
for(i = 0; i < len1; i++)
printf(a[i]+" ");
printf("\n");

}
第2个回答  2013-05-01
给出一段Pacal的代码:
type ary1=array[1..1000]of integer;
var a1,a2:ary1; a:array[1..2000]of integer; i,j,k,t,LenA,LenB:integer;
procedure creat(var b:ary1; n,k:integer); {构造>=k的有序奇或偶数组}
begin
b[1]:=k; for i:=2 to n do b[i]:=b[i-1]+2*random(5);
end;
begin
write('请输入A和B数组元素个数(<=1000):'); readln(LenA,LenB); randomize;
creat(a1,LenA,15); creat(a2,LenB,2);
i:=1; j:=1; k:=1; {i,j,k:三个数组的工作指针}
while (i<=n) and (j<=m) do{当两个均未完}
if a1[i]<=a2[j] then begin a[k]:=a1[i]; inc(i); inc(k) end
else begin a[k]:=a2[j]; inc(j); inc(k) end;
while i<=n do begin a[k]:=a1[i]; inc(i); inc(k) end;
while j<=m do begin a[k]:=a2[j]; inc(j); inc(k) end;
writeln('A数组:'); for t:=1 to n do write(a1[t]:4); writeln;
writeln('B数组:'); for t:=1 to m do write(a2[t]:4); writeln;
writeln('C数组:'); for t:=1 to n+m do write(a[t]:4); writeln;
end.追问

能不能简单点,再说你这个都输不出来

追答

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网