#include <stdio.h>
#include <string.h>
void merge(int input[], int left, int mid, int right);
void mergesort(int input[], int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergesort(input, left, mid);
mergesort(input, mid + 1, right);
merge(input, left, mid, right);
}
}
int sortedarray[1000];
void merge(int input[], int left, int mid, int right) {
int leftindex = left;
int rightindex = mid + 1;
int index = left;
while (leftindex <= mid && rightindex <= right) {
if (input[leftindex] < input[rightindex]) {
sortedarray[index] = input[leftindex];
leftindex++;
} else {
sortedarray[index] = input[rightindex];
rightindex++;
}
index++;
}
while (leftindex <= mid) {
sortedarray[index] = input[leftindex];
index++;
leftindex++;
}
while (rightindex <= right) {
sortedarray[index] = input[rightindex];
index++;
rightindex++;
}
if(left < right)
memcpy(input + left, sortedarray + left, sizeof(int) * (right - left + 1));
}
int main() {
int i;
int data[] = {1, 2, 9, 7, 9, 4, 10, 100, 99, 77, 1, 1000};
mergesort(data, 0, sizeof data / sizeof data[0] - 1);
for(i = 0; i < sizeof data / sizeof data[0]; ++i)
printf("%d ", sortedarray[i]);
putchar('\n');
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnZvaWQgbWVyZ2UoaW50IGlucHV0W10sIGludCBsZWZ0LCBpbnQgbWlkLCBpbnQgcmlnaHQpOwoKdm9pZCBtZXJnZXNvcnQoaW50IGlucHV0W10sIGludCBsZWZ0LCBpbnQgcmlnaHQpIHsKICBpZiAobGVmdCA8IHJpZ2h0KSB7CiAgICBpbnQgbWlkID0gKGxlZnQgKyByaWdodCkgLyAyOwogICAgbWVyZ2Vzb3J0KGlucHV0LCBsZWZ0LCBtaWQpOwogICAgbWVyZ2Vzb3J0KGlucHV0LCBtaWQgKyAxLCByaWdodCk7CiAgICBtZXJnZShpbnB1dCwgbGVmdCwgbWlkLCByaWdodCk7CiAgfQp9CgppbnQgc29ydGVkYXJyYXlbMTAwMF07Cgp2b2lkIG1lcmdlKGludCBpbnB1dFtdLCBpbnQgbGVmdCwgaW50IG1pZCwgaW50IHJpZ2h0KSB7CiAgaW50IGxlZnRpbmRleCA9IGxlZnQ7CiAgaW50IHJpZ2h0aW5kZXggPSBtaWQgKyAxOwogIGludCBpbmRleCA9IGxlZnQ7CgogIHdoaWxlIChsZWZ0aW5kZXggPD0gbWlkICYmIHJpZ2h0aW5kZXggPD0gcmlnaHQpIHsKICAgIGlmIChpbnB1dFtsZWZ0aW5kZXhdIDwgaW5wdXRbcmlnaHRpbmRleF0pIHsKICAgICAgc29ydGVkYXJyYXlbaW5kZXhdID0gaW5wdXRbbGVmdGluZGV4XTsKICAgICAgbGVmdGluZGV4Kys7CiAgICB9IGVsc2UgewogICAgICBzb3J0ZWRhcnJheVtpbmRleF0gPSBpbnB1dFtyaWdodGluZGV4XTsKICAgICAgcmlnaHRpbmRleCsrOwogICAgfQogICAgaW5kZXgrKzsKICB9CgogIHdoaWxlIChsZWZ0aW5kZXggPD0gbWlkKSB7CiAgICBzb3J0ZWRhcnJheVtpbmRleF0gPSBpbnB1dFtsZWZ0aW5kZXhdOwogICAgaW5kZXgrKzsKICAgIGxlZnRpbmRleCsrOwogIH0KICB3aGlsZSAocmlnaHRpbmRleCA8PSByaWdodCkgewogICAgc29ydGVkYXJyYXlbaW5kZXhdID0gaW5wdXRbcmlnaHRpbmRleF07CiAgICBpbmRleCsrOwogICAgcmlnaHRpbmRleCsrOwogIH0KICAKICBpZihsZWZ0IDwgcmlnaHQpCiAgCW1lbWNweShpbnB1dCArIGxlZnQsIHNvcnRlZGFycmF5ICsgbGVmdCwgc2l6ZW9mKGludCkgKiAocmlnaHQgLSBsZWZ0ICsgMSkpOwp9CgppbnQgbWFpbigpIHsKCWludCBpOwoJaW50IGRhdGFbXSA9IHsxLCAyLCA5LCA3LCA5LCA0LCAxMCwgMTAwLCA5OSwgNzcsIDEsIDEwMDB9OwoJCgltZXJnZXNvcnQoZGF0YSwgMCwgc2l6ZW9mIGRhdGEgLyBzaXplb2YgZGF0YVswXSAtIDEpOwoJCglmb3IoaSA9IDA7IGkgPCBzaXplb2YgZGF0YSAvIHNpemVvZiBkYXRhWzBdOyArK2kpCgkJcHJpbnRmKCIlZCAiLCBzb3J0ZWRhcnJheVtpXSk7CgkJCglwdXRjaGFyKCdcbicpOwoJcmV0dXJuIDA7Cn0=