c语言 一维数组找公共元素,如何提取数组中的公共元素分别放到两个数组?
时间: 2023-08-14 11:03:45 浏览: 165
可以使用两个循环来遍历这两个数组,对于每一个数组中的元素,再用一个循环遍历另一个数组,如果找到了相同的元素,则将其加入到公共元素数组中,并从原数组中删除该元素,以免重复加入。
以下是一个示例代码,其中common1和common2分别为两个数组中的公共元素:
```c
#include <stdio.h>
void findCommon(int arr1[], int arr2[], int len1, int len2, int common1[], int common2[], int *lenCommon1, int *lenCommon2) {
int i, j, k;
*lenCommon1 = 0;
*lenCommon2 = 0;
// 遍历数组1
for (i = 0; i < len1; i++) {
// 遍历数组2
for (j = 0; j < len2; j++) {
// 如果找到相同的元素
if (arr1[i] == arr2[j]) {
// 将其加入到公共元素数组中
common1[*lenCommon1] = arr1[i];
(*lenCommon1)++;
// 从数组2中删除该元素
for (k = j; k < len2 - 1; k++) {
arr2[k] = arr2[k+1];
}
len2--;
// 退出内层循环
break;
}
}
}
// 遍历数组2
for (i = 0; i < len2; i++) {
// 遍历数组1(已经从数组2中删除了元素,所以不会重复加入到公共元素数组)
for (j = 0; j < len1; j++) {
// 如果找到相同的元素
if (arr2[i] == arr1[j]) {
// 将其加入到公共元素数组中
common2[*lenCommon2] = arr2[i];
(*lenCommon2)++;
// 退出内层循环
break;
}
}
}
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {2, 4, 6, 8, 10};
int len1 = sizeof(arr1) / sizeof(arr1[0]);
int len2 = sizeof(arr2) / sizeof(arr2[0]);
int common1[5], common2[5], lenCommon1, lenCommon2;
findCommon(arr1, arr2, len1, len2, common1, common2, &lenCommon1, &lenCommon2);
printf("Common elements in arr1 and arr2:\n");
for (int i = 0; i < lenCommon1; i++) {
printf("%d ", common1[i]);
}
printf("\nCommon elements in arr2 and arr1:\n");
for (int i = 0; i < lenCommon2; i++) {
printf("%d ", common2[i]);
}
return 0;
}
```
注意,这个算法的时间复杂度为 O(len1 * len2),如果数组比较大,可能会比较耗时。可以考虑使用哈希表等数据结构来优化算法。
阅读全文