Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,870 questions

51,793 answers

573 users

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 139 views
2 answers 102 views
1 answer 126 views
1 answer 116 views
1 answer 157 views
1 answer 168 views
1 answer 188 views
...