Index « Previous Next »

Question

Suppose A, B, C are arrays of integers of size n, m, and n + m respectively. The numbers in array A and B appear in descending order. Write a user-defined function in C to produce third array C by merging arrays A and B in descending order.

Source Code

#include <stdio.h>

void merge(int A[], int B[], int C[], int n, int m, int *k);

int main()
{
    int A[100], B[100], C[200], i, n, m, k;

    printf("\nEnter number of elements you want to insert in first array :");
    scanf("%d", &n);

    printf("Enter element in descending order\n");

    for (i = 0; i < n; i++)
    {
        printf("Enter element %d :", i + 1);
        scanf("%d", &A[i]);
    }

    printf("\nEnter number of elements you want to insert in second array :");
    scanf("%d", &m);

    printf("Enter element in descending order\n");

    for (i = 0; i < m; i++)
    {
        printf("Enter element :", i + 1);
        scanf("%d", &B[i]);
    }

    merge(A, B, C, n, m, &k);

    printf("\nThe Merged Array in Descending Order\n");

    for (i = 0; i < k; i++)
    {
        printf("%d ", C[i]);
    }

    return 0;
}


void merge(int A[], int B[], int C[], int n, int m, int *k)
{
    int i = 0, j = 0, t;
    *k = 0;

    while (i < n && j < m)
    {
        if (A[i] > B[j])
        {
            C[(*k)++] = A[i++];
        }
        else if (A[i] < B[j])
        {
            C[(*k)++] = B[j++];
        }
        else
        {
            C[(*k)++] = A[i++];
            j++;
        }
    }

    for (t = i; t < n; t++)
    {
        C[(*k)++] = A[t];
    }

    for (t = j; t < m; t++)
    {
        C[(*k)++] = B[t];
    }
}

Output

Enter number of elements you want to insert in first array :5
Enter element in descending order
Enter element 1 :30
Enter element 2 :25
Enter element 3 :19
Enter element 4 :11
Enter element 5 :6

Enter number of elements you want to insert in second array :4
Enter element in descending order
Enter element :22
Enter element :15
Enter element :10
Enter element :1

The Merged Array in Descending Order
30 25 22 19 15 11 10 6 1