#include <iostream>
#include <iomanip>
using namespace std;
template<class T>
void Merge(const T *iniList, T *mergedList,const int l, const int m, const int n) {
int pos1 = l, posf = l, pos2 = m+1;
for (;pos1<=m&&pos2<=n;posf++) {
if (iniList[pos1] < iniList[pos2]) {
mergedList[posf] = iniList[pos1];
pos1++;
}
else {
mergedList[posf] = iniList[pos2];
pos2++;
}
}
if (pos1 <= m)
for (; pos1 <= m; pos1++,posf++)
mergedList[posf] = iniList[pos1];
if (pos2 <= n)
for (; pos2 <= n; pos2++, posf++)
mergedList[posf] = iniList[pos2];
}
template<class T>
T* MergeSort(T *iniList, const int n) {
T *tempList = new T[n];
for (int s = 1; s < n; s = s * 2) {
int i = 0;
for (; i < n - 2*s + 1; i = i + 2*s)
Merge<T>(iniList, tempList, i, i + s - 1, i + 2*s - 1);
iniList = tempList;
for (int j = 0; j < n; j++)
cout << iniList[j] << ',';
cout << endl;
system("PAUSE");
if ((i + s - 1) < n) Merge<T>(iniList, tempList, i, i + s - 1, n);
else {
for (; i < n; i++)
tempList[i] = iniList[i];
}
}
return tempList;
}
// main function
int main(){
int a[10] = { 26,5,77,1,61,11,59,15,48,19};
int *n= MergeSort<int>(a, 10);
system("PAUSE");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgTWVyZ2UoY29uc3QgVCAqaW5pTGlzdCwgVCAqbWVyZ2VkTGlzdCxjb25zdCBpbnQgbCwgY29uc3QgaW50IG0sIGNvbnN0IGludCBuKSB7CglpbnQgcG9zMSA9IGwsIHBvc2YgPSBsLCBwb3MyID0gbSsxOwoJCglmb3IgKDtwb3MxPD1tJiZwb3MyPD1uO3Bvc2YrKykgewoJCWlmIChpbmlMaXN0W3BvczFdIDwgaW5pTGlzdFtwb3MyXSkgewoJCQltZXJnZWRMaXN0W3Bvc2ZdID0gaW5pTGlzdFtwb3MxXTsKCQkJcG9zMSsrOwoJCX0KCQllbHNlIHsKCQkJbWVyZ2VkTGlzdFtwb3NmXSA9IGluaUxpc3RbcG9zMl07CgkJCXBvczIrKzsKCQl9Cgl9CgoJCglpZiAocG9zMSA8PSBtKSAKCQlmb3IgKDsgcG9zMSA8PSBtOyBwb3MxKysscG9zZisrKSAKCQkJbWVyZ2VkTGlzdFtwb3NmXSA9IGluaUxpc3RbcG9zMV07CgkJCgoJaWYgKHBvczIgPD0gbikgCgkJZm9yICg7IHBvczIgPD0gbjsgcG9zMisrLCBwb3NmKyspIAoJCQltZXJnZWRMaXN0W3Bvc2ZdID0gaW5pTGlzdFtwb3MyXTsKCQkKfQp0ZW1wbGF0ZTxjbGFzcyBUPgpUKiBNZXJnZVNvcnQoVCAqaW5pTGlzdCwgY29uc3QgaW50IG4pIHsKCVQgKnRlbXBMaXN0ID0gbmV3IFRbbl07Cglmb3IgKGludCBzID0gMTsgcyA8IG47IHMgPSBzICogMikgewoJCWludCBpID0gMDsKCQlmb3IgKDsgaSA8IG4gLSAyKnMgKyAxOyBpID0gaSArIDIqcykKCQkJTWVyZ2U8VD4oaW5pTGlzdCwgdGVtcExpc3QsIGksIGkgKyBzIC0gMSwgaSArIDIqcyAtIDEpOwoJCQoJCWluaUxpc3QgPSB0ZW1wTGlzdDsKCQkKCQlmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykKCQkJY291dCA8PCBpbmlMaXN0W2pdIDw8ICcsJzsKCQljb3V0IDw8IGVuZGw7CgkJc3lzdGVtKCJQQVVTRSIpOwoKCQlpZiAoKGkgKyBzIC0gMSkgPCBuKSBNZXJnZTxUPihpbmlMaXN0LCB0ZW1wTGlzdCwgaSwgaSArIHMgLSAxLCBuKTsKCQllbHNlIHsKCQkJZm9yICg7IGkgPCBuOyBpKyspCgkJCQl0ZW1wTGlzdFtpXSA9IGluaUxpc3RbaV07CgkJfQoJfQoJcmV0dXJuIHRlbXBMaXN0Owp9Ci8vIG1haW4gZnVuY3Rpb24KaW50IG1haW4oKXsKCWludCBhWzEwXSA9IHsgMjYsNSw3NywxLDYxLDExLDU5LDE1LDQ4LDE5fTsKCWludCAqbj0gTWVyZ2VTb3J0PGludD4oYSwgMTApOwoJc3lzdGVtKCJQQVVTRSIpOwp9
5,26,1,77,11,61,15,59,19,48,
1,1,1,77,11,15,15,59,19,48,
1,1,1,11,11,15,15,59,0,0,
1,1,1,11,11,15,15,59,0,0,
sh: 1: PAUSE: not found
sh: 1: PAUSE: not found
sh: 1: PAUSE: not found
sh: 1: PAUSE: not found
sh: 1: PAUSE: not found