87 lines
2.1 KiB
C
87 lines
2.1 KiB
C
/*
|
|
* C Program to Merge and Sort Elements of 2 different arrays
|
|
*/
|
|
#include <stdio.h>
|
|
|
|
void Merge(int *, int, int, int );
|
|
|
|
void MergeSort(int *array, int left, int right)
|
|
{
|
|
int middle = (left+right)/2;
|
|
/* We have to sort only when left<right because when left=right it is anyhow sorted*/
|
|
if(left<right)
|
|
{
|
|
/* Sort the left part */
|
|
MergeSort(array, left, middle);
|
|
/* Sort the right part */
|
|
MergeSort(array, middle + 1, right);
|
|
/* Merge the two sorted parts */
|
|
Merge(array, left, middle, right);
|
|
}
|
|
}
|
|
/* Merge functions merges the two sorted parts */
|
|
void Merge(int *array, int left, int middle, int right)
|
|
{
|
|
/*to store sorted array*/
|
|
int tmp[right - left + 1];
|
|
int pos = 0, leftposition = left, rightposition = middle + 1;
|
|
while (leftposition <= middle && rightposition <= right)
|
|
{
|
|
if (array[leftposition] < array[rightposition])
|
|
{
|
|
tmp[pos++] = array[leftposition++];
|
|
}
|
|
else
|
|
{
|
|
tmp[pos++] = array[rightposition++];
|
|
}
|
|
}
|
|
while (leftposition <= middle)
|
|
tmp[pos++] = array[leftposition++];
|
|
while (rightposition <= right)
|
|
tmp[pos++] = array[rightposition++];
|
|
int i;
|
|
/* Copy back the sorted array to the original array */
|
|
for (i = 0; i < pos; i++)
|
|
{
|
|
array[i + left] = tmp[i];
|
|
}
|
|
return;
|
|
}
|
|
int main()
|
|
{
|
|
int size;
|
|
printf("\n enter the size of an array");
|
|
scanf("%d", &size);
|
|
int array[size];
|
|
int i, j, k;
|
|
printf("\n enter the array elements");
|
|
for (i = 0; i < size; i++)
|
|
{
|
|
scanf("%d", &array[i]);
|
|
}
|
|
/* Calling this functions sorts the array */
|
|
MergeSort(array, 0, size - 1);
|
|
for (i = 0; i < size; i++)
|
|
{
|
|
printf("%d ", array[i]);
|
|
}
|
|
printf("\n");
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
|
|
enter the size of an array10
|
|
|
|
enter the array elements-12
|
|
10
|
|
45
|
|
32
|
|
49
|
|
-58
|
|
69
|
|
38
|
|
98
|
|
34
|
|
-58 -12 10 32 34 38 45 49 69 98
|