gw7rib@aol.com writes:
Quote:
On 15 Jun, 13:55, Umesh <fraternitydispo...@gmail.comwrote:
Quote:
>How can I extract common elements of two number arrays into another
>array?
>>
>// the following doesn't work
> for(k=0;k<10;k++)
> for(l=0;l<15;l++)
> if(p[k]==q[l]) {r[m]=p[k];++m;}
>
This code looks OK to me, as long as you set m to zero beforehand and
r is big enough. The one snag I can see is that, if an element occurs
more than once in a list, and at least once in the other, it may be
selected in r more times than you want. One way round that might be to
change the value in p to some sort of non-value (eg you could use 0,
or -1, if this wasn't going to occur in the real data). An alternative
might be to have another array to indicate whether the value in p had
been "used" yet or not. It's up to you.
That "other array" already exists (r). If I were forced to use this
rather inefficient method, I'd write a "membership" function:
int in(int x, int p[], int l)
{
/* Return 1 if x is equal to any element in p[0]..p[l-1]; 0 otherwise */
int k;
for (k = 0; k < l; k++)
if (x == p[k])
return 1;
return 0;
}
and then do something like:
for (k = 0; k < sz1; k++)
if (!in(p[k], r, m) && in(p[k], q, s2))
r[m++] = p[k];
A much better way, is to sort p and q and the do a sort of
"anti-merge". That will be much faster for large arrays.
--
Ben.