c++实现2个数组的交集 和并集的函数,交集和并集按照从小到大的顺序输出。
时间: 2023-08-09 14:00:39 浏览: 319
要实现2个数组的交集和并集的函数,并按照从小到大的顺序输出,我们可以使用以下方法:
1. 交集函数:
首先,我们需要定义一个函数,接受两个数组作为参数,返回它们的交集。伪代码如下:
```python
def intersect(arr1, arr2):
result = []
for num in arr1:
if num in arr2:
result.append(num)
return sorted(result)
```
在这个函数中,我们遍历第一个数组的每个元素,并检查它是否也存在于第二个数组中。如果存在,我们将它添加到结果列表中。最后,我们对结果列表进行排序,并返回交集。
2. 并集函数:
接下来,我们需要定义一个函数,接受两个数组作为参数,返回它们的并集。伪代码如下:
```python
def union(arr1, arr2):
result = arr1 + arr2
return sorted(list(set(result)))
```
在这个函数中,我们将两个数组连接起来,并利用集合的性质去除重复元素。然后,我们将结果转换回列表,并进行排序。最后,我们返回并集。
通过使用上述交集和并集函数,我们可以轻松地找到两个数组的交集和并集,并按照从小到大的顺序输出结果。
相关问题
用C++实现2个数组的交集 和并集的函数,交集和并集按照从小到大的顺序输出。
```c
#include <stdio.h>
// 计算数组的长度
int length(int arr[]) {
return sizeof(arr) / sizeof(arr[0]);
}
// 升序排序数组
void sort(int arr[], int len) {
int temp;
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
// 数组交集函数
void intersection(int arr1[], int len1, int arr2[], int len2) {
sort(arr1, len1);
sort(arr2, len2);
int i = 0, j = 0;
while (i < len1 && j < len2) {
if (arr1[i] == arr2[j]) {
printf("%d ", arr1[i]);
i++;
j++;
} else if (arr1[i] < arr2[j]) {
i++;
} else {
j++;
}
}
}
// 数组并集函数
void unionSet(int arr1[], int len1, int arr2[], int len2) {
sort(arr1, len1);
sort(arr2, len2);
int i = 0, j = 0;
while (i < len1 && j < len2) {
if (arr1[i] == arr2[j]) {
printf("%d ", arr1[i]);
i++;
j++;
} else if (arr1[i] < arr2[j]) {
printf("%d ", arr1[i]);
i++;
} else {
printf("%d ", arr2[j]);
j++;
}
}
while (i < len1) {
printf("%d ", arr1[i]);
i++;
}
while (j < len2) {
printf("%d ", arr2[j]);
j++;
}
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {3, 4, 5, 6, 7};
int len1 = length(arr1);
int len2 = length(arr2);
printf("数组交集为:");
intersection(arr1, len1, arr2, len2);
printf("\n数组并集为:");
unionSet(arr1, len1, arr2, len2);
return 0;
}
```
用c++实现2个数组的交集 和并集的函数,交集和并集按照从小到大的顺序输出。
以下是C语言实现两个数组的交集和并集的示例代码:
```c
#include <stdio.h>
void intersection(int arr1[], int n1, int arr2[], int n2) {
int i = 0, j = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
i++;
} else if (arr1[i] > arr2[j]) {
j++;
} else {
printf("%d ", arr1[i++]);
j++;
}
}
printf("\n");
}
void unionSet(int arr1[], int n1, int arr2[], int n2) {
int i = 0, j = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
printf("%d ", arr1[i++]);
} else if (arr1[i] > arr2[j]) {
printf("%d ", arr2[j++]);
} else {
printf("%d ", arr1[i++]);
j++;
}
}
while (i < n1) {
printf("%d ", arr1[i++]);
}
while (j < n2) {
printf("%d ", arr2[j++]);
}
printf("\n");
}
int main() {
int arr1[] = {1, 3, 5, 7, 9};
int arr2[] = {2, 3, 4, 5, 6};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
printf("Intersection: ");
intersection(arr1, n1, arr2, n2);
printf("Union: ");
unionSet(arr1, n1, arr2, n2);
return 0;
}
```
输出结果为:
```
Intersection: 3 5
Union: 1 2 3 4 5 6 7 9
```
首先,我们定义了两个函数`intersection`和`unionSet`,分别用于求两个数组的交集和并集。参数分别为两个数组及其长度。
对于求交集的函数`intersection`,我们使用了两个指针`i`和`j`分别指向两个数组的开头。当两个指针所指的值相等时,输出该值并将两个指针都向后移动一位。如果`arr1[i]`比`arr2[j]`小,则将指针`i`向后移动一位;否则,将指针`j`向后移动一位。这样反复比较直到其中一个数组遍历完毕,输出结果即为两个数组的交集。
对于求并集的函数`unionSet`,我们同样使用了两个指针`i`和`j`分别指向两个数组的开头。当`arr1[i]`比`arr2[j]`小时,输出`arr1[i]`并将指针`i`向后移动一位;否则,输出`arr2[j]`并将指针`j`向后移动一位。当其中一个数组遍历完毕时,将另一个数组的剩余部分依次输出。最后输出的结果即为两个数组的并集。
阅读全文