How to merge two arrays in one array in C

4 Answers

0 votes
#include <stdio.h>
#include <stdlib.h>
 
#define LEN 10

void print_array(int arr[]) {
    for (int i = 0; i < LEN; i++) {
        printf("%3d ", arr[i]);
    }
}
 
int compfunc(const void * a, const void * b) {
   return ( *(int*)a - *(int*)b );
}

void merge_two_arrays_into_one_array(int numbers[], int num1[], int num2[]) {
    int i = 0, j = 0, k = 0;;
      
    while (i < LEN / 2 && j < LEN / 2) { 
        if (num1[i] <= num2[j]) {
            numbers[k] = num1[i];
            i++;
            k++;
        } 
        else {
            numbers[k] = num2[j];
            k++;
            j++;
        }
    }
     
    while (i < LEN / 2) {
        numbers[k] = num1[i];
        i++;
        k++;
    }
     
    while (j < LEN / 2) {
        numbers[k] = num2[j];
        k++;
        j++;
    }
}

int main(void)
{
    int numbers[LEN];
    int num1[LEN / 2] = { 3, 2, 8, 1, 10 };
    int num2[LEN / 2] = { 5, 4, 9, 6, 7 }; 
    
    merge_two_arrays_into_one_array(numbers, num1, num2);
    
    qsort(numbers, LEN, sizeof(int), compfunc);
    
    print_array(numbers); 
 
    return 0;
}

    
     
/*
       
run:
       
  1   2   3   4   5   6   7   8   9  10 
 
*/

 



answered Jan 30, 2016 by avibootz
edited Oct 9, 2024 by avibootz
0 votes
#include <stdio.h>

#define LEN1 5
#define LEN2 8

void print_array(int arr[]) {
    for (int i = 0; i < LEN1 + LEN2; i++) {
        printf("%3d ", arr[i]);
    }
}
 
void merge_two_arrays_into_one_array(int numbers[], int num1[], int num2[]) {
    int i = 0, j = 0, k = 0;;
      
    while (i < LEN1 && j < LEN2) {
        if (num1[i] <= num2[j]) {
            numbers[k] = num1[i];
            i++;
            k++;
        } 
        else {
            numbers[k] = num2[j];
            k++;
            j++;
        }
    }
     
    while (i < LEN1) {
        numbers[k] = num1[i];
        i++;
        k++;
    }
     
    while (j < LEN2) {
        numbers[k] = num2[j];
        k++;
        j++;
    }
}

int main(void)
{
    int numbers[LEN1 + LEN2];
    int num1[LEN1] = { 1, 2, 3, 4, 5 }; //  sorted array
    int num2[LEN2] = { 6, 7, 8, 9, 10, 11, 12, 13 }; // sorted array
    
    merge_two_arrays_into_one_array(numbers, num1, num2);

    print_array(numbers); 
 
    return 0;
}

    
     
/*
       
run:
       
  1   2   3   4   5   6   7   8   9  10  11  12  13 
 
*/

 



answered Jan 30, 2016 by avibootz
edited Oct 9, 2024 by avibootz
0 votes
#include <stdio.h>

#define LEN1 5
#define LEN2 8

void print_array(int arr[]) {
    for (int i = 0; i < LEN1 + LEN2; i++) {
        printf("%3d ", arr[i]);
    }
}
 
void merge_two_arrays_into_one_array(int numbers[], int num1[], int num2[]) {
    int i = 0, j = 0, k = 0;;
      
    while (i < LEN1 && j < LEN2) {
        if (num1[i] <= num2[j]) {
            numbers[k] = num1[i];
            i++;
            k++;
        } 
        else {
            numbers[k] = num2[j];
            k++;
            j++;
        }
    }
     
    while (i < LEN1) {
        numbers[k] = num1[i];
        i++;
        k++;
    }
     
    while (j < LEN2) {
        numbers[k] = num2[j];
        k++;
        j++;
    }
}

int main(void)
{
    int numbers[LEN1 + LEN2];
    int num1[LEN1] = { 7, 3, 2, 9, 1 }; //  not sorted array
    int num2[LEN2] = { 5, 8, 6, 4, 0, 11, 10, 12 }; // not sorted array
    
    merge_two_arrays_into_one_array(numbers, num1, num2);

    print_array(numbers); 
 
    return 0;
}

    
     
/*
       
run:
       
  5   7   3   2   8   6   4   0   9   1  11  10  12 
 
*/

 



answered Jan 30, 2016 by avibootz
edited Oct 9, 2024 by avibootz
0 votes
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print_array(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%3d ", arr[i]);
    }
    printf("\n");
}

int compfunc(const void * a, const void * b) {
   return ( *(int*)a - *(int*)b );
}

int* merge_two_arrays_into_one_array(int arr1[], int size1, int arr2[], int size2) {
    // Allocate memory for the merged array
    int *arr12 = (int*)malloc((size1 + size2) * sizeof(int));
    
    // Copy elements of the first array
    memcpy(arr12, arr1, size1 * sizeof(int));
    
    // Copy elements of the second array
    memcpy(arr12 + size1, arr2, size2 * sizeof(int));
    
    return arr12;
}

int main() {
    int arr1[] = {1, 7, 3, 5};
    int arr2[] = {2, 9, 0, 4, 6};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    
    int* arr12 = merge_two_arrays_into_one_array(arr1, size1, arr2, size2);
    
    print_array(arr12, size1 + size2);
    
    qsort(arr12, size1 + size2, sizeof(int), compfunc);
    
    print_array(arr12, size1 + size2);
    
    free(arr12);
    
    return 0;
}


/*
run:

  1   7   3   5   2   9   0   4   6 
  0   1   2   3   4   5   6   7   9 

*/

 



answered Oct 9, 2024 by avibootz

Related questions

2 answers 241 views
1 answer 213 views
1 answer 219 views
219 views asked Sep 13, 2014 by avibootz
1 answer 155 views
155 views asked Jun 20, 2022 by avibootz
...