#include<iostream>
using namespace std;
void merge(int data[], int size, int first, int mid, int last);
void mergeSort(int data[], int size, int first /*low*/, int last/*high*/)
{
if(first<last-1) // do it if there are more than one lement
{
//sort each half
int mid = (first + last)/2;
//index of midpoint
//sort left half the array [first .... mid-1]
mergeSort(data, size, first, mid);
//sort right half of the array [mid ..... last-1]
mergeSort(data, size, mid, last);
//merge the two halves
merge(data, size, first, mid, last);
}
}
void merge(int data[], int size, int first, int mid, int last)
{
int tempArr[size];
for(int i = 0; i < size; ++i)
tempArr[i] = data[i];
int i=first;
int j=mid;
int k=first;
while (i<mid && j<last)
{
if (tempArr[i] <= tempArr[j])
{
data[k]=tempArr[i];
i++;
}
else
{
data[k] = tempArr[j];
++j;
}
++k;
}
while (i < mid)
{
data[k] = tempArr[i];
++k;
++i;
}
while (j < last)
{
data[k] = tempArr[j];
++k;
++j;
}
}
int main()
{
const int size = 10;
int arr[size] = {1, 0, 6, 15, 30, 56, 23, 3, 7, 10};
mergeSort(arr, size, 0, size);
for(int i=0; i<size; i++)
{
cout<< arr[i]<<" ";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgbWVyZ2UoaW50IGRhdGFbXSwgaW50IHNpemUsIGludCBmaXJzdCwgaW50IG1pZCwgaW50IGxhc3QpOwoKdm9pZCBtZXJnZVNvcnQoaW50IGRhdGFbXSwgaW50IHNpemUsIGludCBmaXJzdCAvKmxvdyovLCBpbnQgbGFzdC8qaGlnaCovKQp7CiAgICBpZihmaXJzdDxsYXN0LTEpIC8vIGRvIGl0IGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGxlbWVudAogICAgewogICAgICAgIC8vc29ydCBlYWNoIGhhbGYKICAgICAgICBpbnQgbWlkID0gKGZpcnN0ICsgbGFzdCkvMjsKICAgICAgICAvL2luZGV4IG9mIG1pZHBvaW50IAogICAgICAgIC8vc29ydCBsZWZ0IGhhbGYgdGhlIGFycmF5IFtmaXJzdCAuLi4uIG1pZC0xXQogICAgICAgIG1lcmdlU29ydChkYXRhLCBzaXplLCBmaXJzdCwgbWlkKTsKICAgICAgICAvL3NvcnQgcmlnaHQgaGFsZiBvZiB0aGUgYXJyYXkgW21pZCAuLi4uLiBsYXN0LTFdCiAgICAgICAgbWVyZ2VTb3J0KGRhdGEsIHNpemUsIG1pZCwgbGFzdCk7CiAgICAgICAgLy9tZXJnZSB0aGUgdHdvIGhhbHZlcyAKICAgICAgICBtZXJnZShkYXRhLCBzaXplLCBmaXJzdCwgbWlkLCBsYXN0KTsKICAgIH0KfQoKdm9pZCBtZXJnZShpbnQgZGF0YVtdLCBpbnQgc2l6ZSwgaW50IGZpcnN0LCBpbnQgbWlkLCBpbnQgbGFzdCkKewogICAgaW50IHRlbXBBcnJbc2l6ZV07CiAgICAKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAJdGVtcEFycltpXSA9IGRhdGFbaV07CiAgICAKICAgIGludCBpPWZpcnN0OwogICAgaW50IGo9bWlkOwogICAgaW50IGs9Zmlyc3Q7CgogICAgd2hpbGUgKGk8bWlkICYmIGo8bGFzdCkKICAgIHsKICAgICAgICBpZiAodGVtcEFycltpXSA8PSB0ZW1wQXJyW2pdKQogICAgICAgIHsKICAgICAgICAgICAgZGF0YVtrXT10ZW1wQXJyW2ldOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGRhdGFba10gPSB0ZW1wQXJyW2pdOwogICAgICAgICAgICArK2o7CiAgICAgICAgfQogICAgICAgICsrazsKICAgIH0KCiAgICB3aGlsZSAoaSA8IG1pZCkKICAgIHsKICAgICAgICBkYXRhW2tdID0gdGVtcEFycltpXTsKICAgICAgICArK2s7CiAgICAgICAgKytpOwogICAgfQogICAgd2hpbGUgKGogPCBsYXN0KQogICAgewogICAgICAgIGRhdGFba10gPSB0ZW1wQXJyW2pdOwogICAgICAgICsrazsKICAgICAgICArK2o7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgY29uc3QgaW50IHNpemUgPSAxMDsKICAgIGludCBhcnJbc2l6ZV0gPSB7MSwgMCwgNiwgMTUsIDMwLCA1NiwgMjMsIDMsIDcsIDEwfTsKICAgIG1lcmdlU29ydChhcnIsIHNpemUsIDAsIHNpemUpOwogICAgZm9yKGludCBpPTA7IGk8c2l6ZTsgaSsrKQogICAgewogICAgICAgIGNvdXQ8PCBhcnJbaV08PCIgIjsKICAgIH0KICAgIHJldHVybiAwOwp9