How to merge two sorted arrays without duplicates in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>
 
int compare(const void* a, const void* b) {
    return (*(int*)a - *(int*)b);
}
 
void add_items(int arr1[], int i, int* mergedArray_size, int** mergedSet) {
    int num = arr1[i];
    int found = 0;
 
    for (int j = 0; j < *mergedArray_size; j++) {
        if ((*mergedSet)[j] == num) {
            found = 1;
            break;
        }
    }
 
    if (!found) {
        *mergedSet = realloc(*mergedSet, (*mergedArray_size + 1) * sizeof(int));
        (*mergedSet)[(*mergedArray_size)++] = num;
    }
}
 
int* merge(int arr1[], int arr1_size, int arr2[], int arr2_size, int* mergedArray_size) {
    int* mergedSet = calloc(1, sizeof(int));
 
    for (int i = 0; i < arr1_size; i++) {
        add_items(arr1, i, mergedArray_size, &mergedSet);
    }
 
    for (int i = 0; i < arr2_size; i++) {
        add_items(arr2, i, mergedArray_size, &mergedSet);
    }
 
    return mergedSet;
}
 
int main() {
    int arr1[] = { 1, 2, 2, 3, 7, 7, 7, 8, 9 };
    int arr1_size = sizeof(arr1) / sizeof(arr1[0]);
    int arr2[] = { 0, 0, 4, 4, 4, 5, 6, 7, 7, 8 };
    int arr2_size = sizeof(arr2) / sizeof(arr2[0]);
    int mergedArray_size = 0;
 
    int* mergedArray = merge(arr1, arr1_size, arr2, arr2_size, &mergedArray_size);
 
    qsort(mergedArray, mergedArray_size, sizeof(int), compare);
 
    for (int i = 0; i < mergedArray_size; i++) {
        printf("%d, ", mergedArray[i]);
    }
 
    free(mergedArray);
 
    return 0;
}
 
 
 
 
 
/*
run:
 
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
 
*/

 



answered Feb 5, 2025 by avibootz

Related questions

2 answers 180 views
2 answers 132 views
1 answer 147 views
1 answer 135 views
1 answer 185 views
1 answer 209 views
1 answer 225 views
...