回 帖 发 新 帖 刷新版面

主题:请教

编写一个函数实现如下功能:把已知的两个按非减的排序数组合并成一个没有重复
元素的数组.

回复列表 (共2个回复)

沙发


我是这样实现的

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++}
     }

}
不知这样有什么不好,或需要改进的地方

板凳

我用的是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掉可以节省内存空间,如果只是小程序这个完全没必要,但是养成习惯是好的
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册