#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)
{
//printf("%d\t", left);
int mid = 0, tmp_l, tmp_m, i;
mid = (left + right + 1) / 2;
if (mid - left > 1)
MergeSort (left, mid - 1);
if (right - mid > 0)
MergeSort (mid, 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];
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Cgp2b2lkIE1lcmdlU29ydCAoIGludCBsZWZ0LGludCByaWdodCk7CgppbnQgZFs1XSA9IHszLCA2ICwgNCwgMTAsIDF9OwppbnQgcFs1XTsKCmludCBtYWluICgpCnsKICAgIGludCB4ID0gMDsKCgogICAgTWVyZ2VTb3J0KDAsIDUpOwoKICAgIGZvcig7IHggPCA2OyB4KyspCiAgICAgICAgcHJpbnRmKCIlZCAiLCBwW3hdKTsKCiAgICBwcmludGYoIlxuIik7CgogICAgZm9yKHggPSAwOyB4IDwgNjsgeCsrKQogICAgICAgIHByaW50ZigiJWQgIiwgZFt4XSk7CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgTWVyZ2VTb3J0IChpbnQgbGVmdCxpbnQgcmlnaHQpCnsKCiAgICAvL3ByaW50ZigiJWRcdCIsIGxlZnQpOwoJaW50IG1pZCA9IDAsIHRtcF9sLCB0bXBfbSwgaTsKCgltaWQgPSAobGVmdCArIHJpZ2h0ICsgMSkgLyAyOwoKCWlmIChtaWQgLSBsZWZ0ID4gMSkKICAgICAgICBNZXJnZVNvcnQgKGxlZnQsIG1pZCAtIDEpOwoKCWlmIChyaWdodCAtIG1pZCA+IDApCiAgICAgICAgTWVyZ2VTb3J0IChtaWQsIHJpZ2h0KTsKCgl0bXBfbCA9IGxlZnQ7Cgl0bXBfbSA9IG1pZDsKCglmb3IgKGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspCgkgICAgcFtpXSA9ICgodG1wX2wgPT0gbWlkKSB8fCAoKHRtcF9tIDw9IHJpZ2h0KSAmJiAoZFt0bXBfbF0gPiBkW3RtcF9tXSkpKSA/ICBkW3RtcF9tKytdIDogZFt0bXBfbCsrXTsKCgoJZm9yIChpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKQoJCWRbaV0gPSBwW2ldOwp9