C程序 查找两个数组之间的共同数组元素

C程序 查找两个数组之间的共同数组元素

这里我们将建立一个C程序来寻找两个数组之间的共同元素。给定两个数组,我们必须用以下两种方法找到它们的共同元素。

1.使用蛮力
2.使用合并排序,然后进行遍历

输入:

array1[] = {8, 2, 3, 4, 5, 6, 7, 1}
array2[] = {4, 5, 7, 11, 6, 1}

输出:

Common elements are: 4 5 6 7 1 

方法1:

这是一种强硬的方法,简单地在第一个数组中遍历,对于第一个数组中的每一个元素,在第二个数组中遍历,找出它是否存在,如果是,则在结果数组中检查它(以避免重复),之后,如果我们发现这个元素不存在于结果数组中,则打印它并将其存储在结果数组中。

// C Program to demonstrate scrunity of
// 2 Common Array Elements Using Brute force
#include <stdio.h>
 
int main()
{
    int array1[] = { 8, 2, 3, 4, 5, 6, 7, 1 };
    int array2[] = { 4, 5, 7, 11, 6, 1 };
    int i, j, flag, x, k = 0;
    int result[100];
    printf("Common elements are: ");
   
    // To traverse in array1.
    for (i = 0; i < sizeof(array1) / 4; i++) {
       
        // To traverse in array2.
        for (j = 0; j < sizeof(array2) / 4; j++) {
           
            // To match elements of array1 with elements of
            // array2.
            if (array1[i] == array2[j]) {
               
                flag = 0;
               
                // To traverse in result array.
                for (x = 0; x < k; x++) {
                   
                    // Check whether found element is
                    // already present in result array or
                    // not.
                    if (result[x] == array1[i]) {
                        flag++;
                    }
                }
               
                // If we found a new element which is common
                // in both arrays then store it in result
                // array and print it.
                if (flag == 0) {
                   
                    result[k] = array1[i];
                    printf("%d ", result[k]);
                    k++;
                }
            }
        }
    }
}

输出

Common elements are: 4 5 6 7 1 

时间复杂度。O(mnk)

Auxiliary Space: O(max(m,n)),因为在最坏的情况下,所有的元素都可能是不同的和共同的。

方法2:

这个逻辑可以应用于已排序的数组,如果没有给出已排序的数组,则使用合并排序,因为其时间复杂度较低,然后应用这种方法。

1.在一个数组中使用两个变量进行遍历,i代表数组1,j代表数组2。
2.如果数组1的元素小于数组2的元素,则检查i++。
3.检查数组2的元素是否小于数组1的元素,然后j++。
4.检查数组1的元素是否等于数组2的元素,然后检查它是否在之前被打印出来,如果没有,则打印出来并存储在结果数组中。

// C Program to demonstrate scrunity of
// 2 Common Array Elements Using Merge
// Sort and then Traversing
#include <stdio.h>
 
int main()
{
    int array1[] = { 1, 2, 2, 3, 5, 6, 7, 8, 18, 29, 37 };
    int array2[] = { 2, 2, 4, 5, 7, 9, 10, 18 };
    int i = 0, j = 0, flag, x, k = 0;
    int result[100];
   
    // Calculate size of arrays
    int array1_size = sizeof(array1) / sizeof(array1[0]);
    int array2_size = sizeof(array2) / sizeof(array2[0]);
   
    printf("Common elements are: ");
   
    // Step 1
    while (i < array1_size && j < array2_size) {
       
        // Step 2
        if (array1[i] < array2[j]) {
            i++;
        }
        // Step 3
        else if (array1[i] > array2[j]) {
            j++;
        }
        // Step 4
        else {
            flag = 0;
           
            // To traverse in result array.
            for (x = 0; x < k; x++) {
               
                // Check whether found element is already
                // present in result array or not.
                if (result[x] == array1[i]) {
                    flag++;
                }
            }
           
            // If we found a new element which is common in
            // both arrays then store it in result array and
            // print it.
            if (flag == 0) {
                printf("%d ", array1[i]);
                result[k] = array1[i];
                k++;
            }
            i++;
            j++;
        }
    }
}

输出

Common elements are: 2 5 7 18 

时间复杂度。_ O((m+n)*k)

Auxiliary Space: O(max(m,n)),因为在最坏的情况下,所有的元素都可能是不同的和共同的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C语言 实例