#include <iostream>
using namespace std;
void mergeSort(int list[], int lowerBound, int upperBound);
void merge(int list[], int lowerBound, int upperBound, int mid);
int main(void) {
int a[]={7,4,2,19,5};
int i;
mergeSort(a,0,4);
for(i=0;i<5;i++)
cout<<a[i]<<"\n";
return 0;
}
void mergeSort(int list[], int lowerBound, int upperBound)
{
int mid;
if (upperBound > lowerBound)
{
mid = ( lowerBound + upperBound) / 2;
mergeSort(list, lowerBound, mid);
mergeSort(list, mid + 1, upperBound);
merge(list, lowerBound, upperBound, mid);
}
}
void merge(int list[], int lowerBound, int upperBound, int mid)
{
int* leftArray = NULL;
int* rightArray = NULL;
int i, j, k;
int n1 = mid - lowerBound + 1;
int n2 = upperBound - mid;
leftArray = new int[n1];
rightArray = new int[n2];
for (i = 0; i < n1; i++)
leftArray[i] = list[lowerBound + i];
for (j = 0; j < n2; j++)
rightArray[j] = list[mid + 1 + j];
i = 0;
j = 0;
k = lowerBound;
while (i < n1 && j < n2)
{
if (leftArray[i] <= rightArray[j])
{
list[k] = leftArray[i];
i++;
}
else
{
list[k] = rightArray[j];
j++;
}
k++;
}
while (i < n1)
{
list[k] = leftArray[i];
i++;
k++;
}
while (j < n2)
{
list[k] = rightArray[j];
j++;
k++;
}
delete [] leftArray;
delete [] rightArray;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBtZXJnZVNvcnQoaW50IGxpc3RbXSwgaW50IGxvd2VyQm91bmQsIGludCB1cHBlckJvdW5kKTsKdm9pZCBtZXJnZShpbnQgbGlzdFtdLCBpbnQgbG93ZXJCb3VuZCwgaW50IHVwcGVyQm91bmQsIGludCBtaWQpOwoKaW50IG1haW4odm9pZCkgewoJaW50IGFbXT17Nyw0LDIsMTksNX07CglpbnQgaTsKCW1lcmdlU29ydChhLDAsNCk7Cglmb3IoaT0wO2k8NTtpKyspCiAgICAgICAgY291dDw8YVtpXTw8IlxuIjsKCXJldHVybiAwOwp9Cgp2b2lkIG1lcmdlU29ydChpbnQgbGlzdFtdLCBpbnQgbG93ZXJCb3VuZCwgaW50IHVwcGVyQm91bmQpCnsKICAgIGludCBtaWQ7CgogICAgaWYgKHVwcGVyQm91bmQgPiBsb3dlckJvdW5kKQogICAgewogICAgICAgIG1pZCA9ICggbG93ZXJCb3VuZCArIHVwcGVyQm91bmQpIC8gMjsKICAgICAgICBtZXJnZVNvcnQobGlzdCwgbG93ZXJCb3VuZCwgbWlkKTsKICAgICAgICBtZXJnZVNvcnQobGlzdCwgbWlkICsgMSwgdXBwZXJCb3VuZCk7CiAgICAgICAgbWVyZ2UobGlzdCwgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZCwgbWlkKTsKICAgIH0KfQp2b2lkIG1lcmdlKGludCBsaXN0W10sIGludCBsb3dlckJvdW5kLCBpbnQgdXBwZXJCb3VuZCwgaW50IG1pZCkKewogICAgaW50KiBsZWZ0QXJyYXkgPSBOVUxMOwogICAgaW50KiByaWdodEFycmF5ID0gTlVMTDsKICAgIGludCBpLCBqLCBrOwogICAgaW50IG4xID0gbWlkIC0gbG93ZXJCb3VuZCArIDE7CiAgICBpbnQgbjIgPSB1cHBlckJvdW5kIC0gbWlkOwogICAgbGVmdEFycmF5ID0gbmV3IGludFtuMV07CiAgICByaWdodEFycmF5ID0gbmV3IGludFtuMl07CiAgICBmb3IgKGkgPSAwOyBpIDwgbjE7IGkrKykKICAgICAgICBsZWZ0QXJyYXlbaV0gPSBsaXN0W2xvd2VyQm91bmQgKyBpXTsKICAgIGZvciAoaiA9IDA7IGogPCBuMjsgaisrKQogICAgICAgIHJpZ2h0QXJyYXlbal0gPSBsaXN0W21pZCArIDEgKyBqXTsKCiAgICBpID0gMDsKICAgIGogPSAwOwogICAgayA9IGxvd2VyQm91bmQ7CgogICAgd2hpbGUgKGkgPCBuMSAmJiBqIDwgbjIpCiAgICB7CiAgICAgICAgaWYgKGxlZnRBcnJheVtpXSA8PSByaWdodEFycmF5W2pdKQogICAgICAgIHsKICAgICAgICAgICAgbGlzdFtrXSA9IGxlZnRBcnJheVtpXTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBsaXN0W2tdID0gcmlnaHRBcnJheVtqXTsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KCiAgICAgICAgaysrOwogICAgfQoKICAgIHdoaWxlIChpIDwgbjEpCiAgICB7CiAgICAgICAgbGlzdFtrXSA9IGxlZnRBcnJheVtpXTsKICAgICAgICBpKys7CiAgICAgICAgaysrOwogICAgfQoKICAgIHdoaWxlIChqIDwgbjIpCiAgICB7CiAgICAgICAgbGlzdFtrXSA9IHJpZ2h0QXJyYXlbal07CiAgICAgICAgaisrOwogICAgICAgIGsrKzsKICAgIH0KCiAgICBkZWxldGUgW10gbGVmdEFycmF5OwogICAgZGVsZXRlIFtdIHJpZ2h0QXJyYXk7Cn0K