#include <stdio.h>
#include <stdlib.h>
/*
Function: mergeArrays
Purpose: Merge three integer arrays into one dynamically allocated array.
The caller receives the merged array and its size.
*/
int* mergeArrays(const int *a, int sizeA,
const int *b, int sizeB,
const int *c, int sizeC,
int *mergedSize)
{
*mergedSize = sizeA + sizeB + sizeC;
int *merged = (int*)malloc(*mergedSize * sizeof(int));
if (!merged) {
printf("Memory allocation failed\n");
exit(1);
}
int index = 0;
for (int i = 0; i < sizeA; i++) merged[index++] = a[i];
for (int i = 0; i < sizeB; i++) merged[index++] = b[i];
for (int i = 0; i < sizeC; i++) merged[index++] = c[i];
return merged;
}
/*
Function: compareInts
Purpose: Comparison function for qsort (ascending order).
*/
int compareInts(const void *x, const void *y) {
return (*(int*)x - *(int*)y);
}
/*
Function: uniqueSorted
Purpose: Sort an array and remove duplicates.
Returns a new dynamically allocated array containing only unique values.
*/
int* uniqueSorted(int *arr, int size, int *uniqueSize)
{
qsort(arr, size, sizeof(int), compareInts);
int *unique = (int*)malloc(size * sizeof(int));
if (!unique) {
printf("Memory allocation failed\n");
exit(1);
}
int count = 0;
for (int i = 0; i < size; i++) {
if (i == 0 || arr[i] != arr[i - 1]) {
unique[count++] = arr[i];
}
}
*uniqueSize = count;
return unique;
}
int main()
{
/* Example input arrays */
int arr1[] = {5, 1, 14, 3, 8, 9, 1, 1, 7};
int arr2[] = {3, 5, 7, 2, 3};
int arr3[] = {2, 9, 8};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int size2 = sizeof(arr2) / sizeof(arr2[0]);
int size3 = sizeof(arr3) / sizeof(arr3[0]);
/* Step 1: Merge arrays */
int mergedSize;
int *merged = mergeArrays(arr1, size1, arr2, size2, arr3, size3, &mergedSize);
/* Step 2: Sort and remove duplicates */
int uniqueSize;
int *unique = uniqueSorted(merged, mergedSize, &uniqueSize);
/* Step 3: Print result */
printf("Sorted unique array: ");
for (int i = 0; i < uniqueSize; i++) {
printf("%d ", unique[i]);
}
printf("\n");
/* Cleanup */
free(merged);
free(unique);
return 0;
}
/*
run:
Sorted unique array: 1 2 3 5 7 8 9 14
*/