纯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
温馨提示:内容为网友见解,仅供参考