急啊,用C语言求两个数组并集并且按顺序输出,还得输出并集中元素的个数

如题所述

纯C的代码如下。 基本是先对两个数组排序, 然后再求并集。
代码如下:
#include <stdio.h>
#include <stdlib.h>

int compare (const void * a, const void * b);
void FindUnion(const int *pa1, const int *pa2, const size_t m, const size_t n);

int main(int argc, char *argv[])
{
int arr1[] = {6, 5, 4, 2, 1};
int arr2[] = {5, 7, 3, 2};
size_t len1, len2;

len1 = sizeof(arr1)/sizeof(arr1[0]);
len2 = sizeof(arr2)/sizeof(arr2[0]);

qsort(arr1, len1, sizeof(int), compare);
qsort(arr2, len2, sizeof(int), compare);

FindUnion(arr1, arr2, len1, len2);

return 0;
}

void FindUnion(const int *pa1, const int *pa2, const size_t m, const size_t n)
{
int i = 0, j = 0;

while(i < m && j < n)
{
if(pa1[i] < pa2[j])
printf(" %d ", pa1[i++]);
else if(pa1[i] > pa2[j])
printf(" %d ", pa2[j++]);
else
{
printf(" %d ", pa2[j++]);
i++;
}
}

while(i < m)
printf(" %d ", pa1[i++]);

while(j < n)
printf(" %d ", pa2[j++]);
}

int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

输出:
1 2 3 4 5 6 7
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-13
用for循环,拿第一个数组中的元素和第二个数组中的数分别比较,有相同的则存放到另外的数组中,并用count记录相同元素的个数。本回答被提问者采纳
第2个回答  2012-12-13
将两个数组并到c数组中,然后用排序方法进行排序,cnt记录他的元素个数!代码实在不是想写!
相似回答