主题:请教
cabtsz
[专家分:30] 发布于 2006-06-21 13:58:00
编写一个函数实现如下功能:把已知的两个按非减的排序数组合并成一个没有重复
元素的数组.
回复列表 (共2个回复)
沙发
cabtsz [专家分:30] 发布于 2006-06-21 19:04:00
我是这样实现的
enum={MAX=256}
int c[MAX];
void change(int a[],int b[],int m,int n)
{
int *p=a;
int *q=b;
if(m+n>MAX)
{return false;}
for(int i=0;i<m+n;i++)
{
if(*p>*q)
{c[i]=*q;
q++;}
else
if(*p==*q)
{c[i]=*q;p++;q++;}
else
{c[i]=*p;p++}
}
}
不知这样有什么不好,或需要改进的地方
板凳
wwsq5573 [专家分:250] 发布于 2006-06-22 12:32:00
我用的是C语言编写的,不过算法是一样的,帮你改进了一下
#define MAX 256
#define false 0
int c[MAX];
int change(int a[],int b[],int m,int n)
{
int *q,*p;
int i,num;
p=(int *)malloc(m*sizeof(int));
q=(int *)malloc(n*sizeof(int));//要先给p,q分配空间
p=a;
q=b;
num=m+n;
if(num>MAX)
{return false;}
for(i=0;i<num;i++)
{
if(*p>*q)
{c[i]=*q;
q++;}
else
if(*p==*q)
{c[i]=*q;p++;q++;num--;}//因为a,b中两个数在c中只用一个空间存储,所以num要减一
else
{c[i]=*p;p++;}
}
free(p);
free(q);//用完中间变量后把它们free掉可以节省内存空间,如果只是小程序这个完全没必要,但是养成习惯是好的
}
我来回复