Merge Sort
#include
void merge();
void merge_sort();
main()
{
int k,N,*B;
printf("Enter the number of integers to be sorted:\n");
scanf("%d",&N);
B = (int *)malloc(N*sizeof(int));
printf("Enter %d integers:\n",N);
for (k = 0; k < N; k++)
scanf("%d",&B[k]);
merge_sort(B,0,N-1);
printf("The sorted array is:\n");
printf("\n");
for (k=0; k < N; k++)
printf("B[%d] = %d\n",k,B[k]);
printf("\n");
return 0;
} /* main */
void merge(int *A, int first, int middle, int last)
{
int i, left, right, *temp;
temp = (int *)malloc(sizeof *temp);
left = first;
right = middle + 1;
i = first;
while (left <= middle && right <= last)
{
if (A[left] < A[right])
{
temp[i] = A[left];
left++; i++;
}
else
{
temp[i] = A[right];
right++; i++;
}
}
while (left <= middle)
{
temp[i] = A[left];
left++; i++;
}
while (right <= last)
{
temp[i] = A[right];
right++; i++;
}
for (i = first; i <= last; i++)
A[i] = temp[i];
} /* merge */
void merge_sort(int *A, int first, int last)
{
int middle;
if (first < last)
{
middle = (first + last)/2;
merge_sort(A,first,middle);
merge_sort(A,middle+1,last);
merge(A,first,middle,last);
}
} /* merge_sort */