Given two sorted arrays, merge them into single array such that the elements are not repeated.
For Example:
Input:
Array1: 2 4 5 6 7 9 10 13
Array2: 2 3 4 5 6 7 8 9 11 15
Output: 2 3 4 5 6 7 8 9 10 11 13 15
Implementation:
For Example:
Input:
Array1: 2 4 5 6 7 9 10 13
Array2: 2 3 4 5 6 7 8 9 11 15
Output: 2 3 4 5 6 7 8 9 10 11 13 15
Implementation:
#include<stdio.h> #include<stdlib.h> int main() { int *s,*v,*c; int n,x; int l,r,t; int i; /* Get the size of the first sorted array */ scanf("%d",&n); /* allocate memory for the first array */ s=(int*)malloc(sizeof(int)*n); /* Get the size of the second sorted array */ scanf("%d",&x); /* allocate memory for the second array */ v=(int*)malloc(sizeof(int)*x); /* Get the values of the first sorted array */ for(i=0;i<n;i++) scanf("%d",(s+i)); /* Get the values of the second sorted array */ for(i=0;i<x;i++) scanf("%d",(v+i)); /* Allocate memory for the resultant array */ c=(int*)malloc(sizeof(int)*(n+x)); /* Initialize counter variables for array1, array2, result array */ l=0; r=0; t=0; /* Until we reach the end of any one of the array */ while(l<n && r<x) { /* Check if the value of the both arrays are equal If yes, copy value from any one of the array */ if(*(s+l)==*(v+r)) { c[t++]=*(s+l); /* Increment both of the array pointers */ l++; r++; } /* If the value of array1 is less than the value of array2 copy the value of array1 & move the pointer of array 1*/ else if(*(s+l)<*(v+r)) { c[t++]=*(s+l); l++; } /* Else copy the value of array2 & move the pointer of array2*/ else { c[t++]=*(v+r); r++; } } /* We reached the end of array 1*/ if(l==n) { /* But yet we did't reached the end of array 2 */ while(r<x) { /* Copy all the remaining elements of array 2 to result array */ c[t++]=*(v+r); r++; } } else { while(l<n) { /* Else, copy all the remaining elements of array 1 to result array */ c[t++]=*(s+l); l++; } } /* Print the result array */ for(i=0;i<t;i++) printf("%d ",*(c+i)); return 0; }
Input:
8
10
2 4 5 6 7 9 10 13
2 3 4 5 6 7 8 9 11 15
Output:
2 3 4 5 6 7 8 9 10 11 13 15