How to merge two arrays in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void merge(int [], int, int [], int, int []);
void bubble_sort(int a[], int size);
void print_array(int arr[], int size);

int main(void)
{
    int a[5], b[7], i, len_a, len_b, c[12];
 
    srand(time(NULL));
    
    len_a = sizeof(a) / sizeof(int); 
    for (i = 0; i < len_a; i++)
         a[i] = rand() % 100 + 1;
    bubble_sort(a, len_a);
    printf("a:\n");
    print_array(a, len_a);
    
    len_b = sizeof(b) / sizeof(int);
    for (i = 0; i < len_b; i++)
         b[i] = rand() % 100 + 1;
    bubble_sort(b, len_b);
    printf("\nb:\n");
    print_array(b, len_b);
     
    merge(a, len_a, b, len_b, c);
     
    printf("\nsorted merge array:\n");
    print_array(c, len_a + len_b);
      
    return 0;
}
 
void merge(int a[], int len_a, int b[], int len_b, int c[]) 
{
    int i, j, k;
 
    j = k = 0;
 
    for (i = 0; i < len_a + len_b;) 
    {
        if (j < len_a && k < len_b) 
        {
            if (a[j] < b[k]) 
            {
                c[i] = a[j];
                j++;
            }
            else 
            {
                c[i] = b[k];
                k++;
            }
            i++;
        }
        else if (j == len_a) 
             {
                for (; i < len_a + len_b;) 
                {
                    c[i] = b[k];
                    k++;
                    i++;
                }
             }
             else 
             {
                for (; i < len_a + len_b;) 
                {
                    c[i] = a[j];
                    j++;
                    i++;
                }
             }
    }
}
void bubble_sort(int a[], int size)
{
    int i, j, swap, tmp;
    
    for (i = 0; i < size; i++)
    {
        swap = 0;
        for (j = 0; j < size - i - 1; j++)
        {
            if(a[j] > a[j + 1])
            {
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
                     
                swap = 1;
            }
        }
        if (swap == 0) break;
    }
}
void print_array(int arr[], int size)
{
    int i;
     
    for (i = 0; i < size; i++)
         printf("%4d", arr[i]); 
} 

/*
run:

a:
  27  28  51  58  78
b:
  37  38  60  86  92  94  99
sorted merge array:
  27  28  37  38  51  58  60  78  86  92  94  99
*/


answered Sep 13, 2014 by avibootz
edited Sep 13, 2014 by avibootz

Related questions

1 answer 213 views
2 answers 241 views
4 answers 835 views
835 views asked Jan 30, 2016 by avibootz
...