ideone twierdzi że w kodzie jest segfault.
Zresztą co tu się dziwić? Masz funkcje rekurencyjną bez warunku stopu...
A kod wstawia się tak:
#include<stdio.h>
#include<stdlib.h>
void MergeSort (int left,int right);
int d[5] = {3, 6 , 4, 10, 1};
int p[5];
int main ()
{
int x = 0;
MergeSort(0, 5);
for(; x < 6; x++)
printf("%d ", p[x]);
printf("\n");
for(x = 0; x < 6; x++)
printf("%d ", d[x]);
return 0;
}
void MergeSort (int left,int right)
{
int mid = (left + right) / 2;
int i = 0;
int tmp_l = left;
int tmp_m = mid;
MergeSort(left, mid);
MergeSort(mid+1, right);
tmp_l = left;
tmp_m = mid;
for (i = left; i <= right; i++)
p[i] = ((tmp_l == mid) || ((tmp_m <= right) && (d[tmp_l] > d[tmp_m]))) ? d[tmp_m++] : d[tmp_l++];
for (i = left; i <= right; i++)
d[i] = p[i];
}