Find common elements in two arrays

Hi..

I have the following program..

void FindCommonArrayElements(int a[], int sizeofa, int b[], int sizeofb)
{
int c[10];
for(int i=0;i<sizeofa;i++)
{
for(int j=0;j<sizeofb;j++)
{
if(a[i] == b[j])
{
c[i] = a[i];
}
}
}
for (int i = 0; i < sizeofa; i++)
printf("c[%d] = %d\n", i, c[i]);
}

int main()
{
int a[] = {1, 3, 5, 7, 9, 10, 11, 14, 15, 2};
int b[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sizeofa = sizeof(a)/sizeof(int);
int sizeofb = sizeof(b)/sizeof(int);

FindCommonArrayElements(a, sizeofa, b, sizeofb);

}

The output is correct but has some uninitialized values.. How to fix the program to get rid of the garbled data in between?

c[0] = 1
c[1] = 3
c[2] = 5
c[3] = 7
c[4] = 9
c[5] = 10
c[6] = -858993460
c[7] = -858993460
c[8] = -858993460
c[9] = 2

LVL 1
Who is Participating?

x

Commented:
The problem is with the counters.
You can keep i for arr A
j for arr B
and can keep k for arr C

do  c[k] = a[i];

and then increment k after the above statement.

Hope it helps.
0

Author Commented:
ah..yes it works now..thanks :)

void FindCommonArrayElements(int a[], int sizeofa, int b[], int sizeofb)
{
int c[10];
int k=0;
for(int i=0;i<sizeofa;i++)
{
for(int j=0;j<sizeofb;j++)
{
if(a[i] == b[j])
{
c[k] = a[i];
k++;
}
}
}
for (int i = 0; i < k; i++)
printf("c[%d] = %d\n", i, c[i]);
}

int main()
{
int a[] = {1, 3, 5, 7, 9, 10, 11, 14, 15, 2};
int b[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sizeofa = sizeof(a)/sizeof(int);
int sizeofb = sizeof(b)/sizeof(int);

FindCommonArrayElements(a, sizeofa, b, sizeofb);

}
0

Author Commented:
How can we improve the code so it runs faster than NLogN ?
0

Commented:
your arrays are sorted. why dont you implement binary search in looking for the match?

this will prove much faster than current N^2 code complexity.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.