本文共 1689 字,大约阅读时间需要 5 分钟。
#include
#include
//使用的是冒泡排序
if (!flag) break;//当一次冒泡后若没有元素位置发生变动则可以直接结束排序
flag = 0;
}
}
int set_intersection(int*a, int*b, int*c,int lenA,int lenB)
{
int i = 0, j = 0, k = 0;
while (i
{
if (a[i] == b[j])
{
c[k++] = a[i];
i++;
j++;
}
else if (a[i] > b[j]) j++;
else i++;
}
return k;
}
int set_union(int*a, int*b, int*c, int lenA, int lenB)
{
int i = 0, j = 0, k = 0;
while (i
{
if (a[i] == b[j])
{
c[k++] = a[i];
i++;
j++;
}
else if (a[i]
{
c[k++] = a[i];
i++;
}
else
{
c[k++] = b[j];
j++;
}
}
//将A中剩余元素拷贝进并集中
while (i
{
c[k++] = a[i++];
}
//将B中剩余元素拷贝进并集中
while (j
{
c[k++] = b[j++];
}
return k;
}
int set_complementary(int*a, int*b, int*c, int lenA, int lenB)
{
int i = 0, j = 0, k = 0;
while (i
{
if (a[i] == b[j])
{
i++;
j++;
}
else if (a[i] > b[j])
{
j++;
}
else
{
c[k++] = a[i++];
}
}
//将A中剩余元素拷贝进补集中
while (i
{
c[k++] = a[i++];
}
return k;
}
int main()
{
int n, m, i, j;
scanf("%d", &n);
int* setA = (int*)malloc(n*sizeof(int));
for (i = 0; i
scanf("%d", &setA[i]);
scanf("%d", &m);
int* setB = (int*)malloc(m*sizeof(int));
for (i = 0; i
scanf("%d", &setB[i]);
sort(setA, n);
sort(setB, m);
int sizeC = n
int sizeD = m + n;
int* setC = (int*)malloc(sizeC*sizeof(int));
int* setD = (int*)malloc(sizeD*sizeof(int));
int* setE = (int*)malloc(n*sizeof(int));
int lenC = set_intersection(setA, setB, setC, n, m);
int lenD = set_union(setA, setB, setD, n, m);
int lenE = set_complementary(setA, setB, setE, n, m);
if (lenC > 0)
{
for (i = 0; i
printf("%d ", setC[i]);
printf("%d\n", setC[lenC - 1]);
}
if (lenD > 0)
{
for (i = 0; i
printf("%d ", setD[i]);
printf("%d\n", setD[lenD - 1]);
}
if (lenE > 0)
{
for (i = 0; i
printf("%d ", setE[i]);
printf("%d\n", setE[lenE - 1]);
}
return 0;
}
转载地址:https://blog.csdn.net/weixin_42166105/article/details/117271794 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!