#include <iostream>
#include <string>
using namespace std;
string merge(string str1, string str2) {
string final = "";
int i = 0, j = 0;
bool fromStr1 = false;
while (true) {
if (i >= (int)str1.size()) {
break;
}
if (j >= (int)str2.size()) {
fromStr1 = true; // changed the order of this with break!
break;
}
if (str1[i] < str2[j]) {
final += str1[i];
i++;
}
else {
final += str2[j];
j++;
}
}
if (fromStr1) {
for (int t = i; t < (int)str1.size(); t++) {
final += str1[t];
}
}
else {
for(int t = j; t < (int)str2.size(); t++) {
final += str2[t];
}
}
return final;
}
string mergeSort(string str1) {
int len = str1.size();
if (len <= 1)
return str1;
else {
string newStr1 = mergeSort(str1.substr(0, len / 2));
string newStr2 = mergeSort(str1.substr(len / 2, len - len / 2));
return merge(newStr1, newStr2);
}
}
int main()
{
cout << '"' << mergeSort("") << '"' << endl;
cout << '"' << mergeSort("a") << '"' << endl;
cout << '"' << mergeSort("ba") << '"' << endl;
cout << '"' << mergeSort("132") << '"' << endl;
cout << '"' << mergeSort("4321") << '"' << endl;
cout << '"' << mergeSort("54321") << '"' << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBtZXJnZShzdHJpbmcgc3RyMSwgc3RyaW5nIHN0cjIpIHsKICBzdHJpbmcgZmluYWwgPSAiIjsKICBpbnQgaSA9IDAsIGogPSAwOwogIGJvb2wgZnJvbVN0cjEgPSBmYWxzZTsKCiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChpID49IChpbnQpc3RyMS5zaXplKCkpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaiA+PSAoaW50KXN0cjIuc2l6ZSgpKSB7CiAgICAgIGZyb21TdHIxID0gdHJ1ZTsgLy8gY2hhbmdlZCB0aGUgb3JkZXIgb2YgdGhpcyB3aXRoIGJyZWFrIQogICAgICBicmVhazsKICAgIH0KCiAgICBpZiAoc3RyMVtpXSA8IHN0cjJbal0pIHsKICAgICAgZmluYWwgKz0gc3RyMVtpXTsKICAgICAgaSsrOwogICAgfQogICAgZWxzZSB7CiAgICAgIGZpbmFsICs9IHN0cjJbal07CiAgICAgIGorKzsKICAgIH0KICB9CgogIGlmIChmcm9tU3RyMSkgewogICAgZm9yIChpbnQgdCA9IGk7IHQgPCAoaW50KXN0cjEuc2l6ZSgpOyB0KyspIHsKICAgICAgZmluYWwgKz0gc3RyMVt0XTsKICAgIH0KICB9CiAgZWxzZSB7CiAgICBmb3IoaW50IHQgPSBqOyB0IDwgKGludClzdHIyLnNpemUoKTsgdCsrKSB7CiAgICAgIGZpbmFsICs9IHN0cjJbdF07CiAgICB9CiAgfQoKICByZXR1cm4gZmluYWw7Cn0KCnN0cmluZyBtZXJnZVNvcnQoc3RyaW5nIHN0cjEpIHsKICBpbnQgbGVuID0gc3RyMS5zaXplKCk7CiAgaWYgKGxlbiA8PSAxKQogICAgcmV0dXJuIHN0cjE7CiAgZWxzZSB7CiAgICBzdHJpbmcgbmV3U3RyMSA9IG1lcmdlU29ydChzdHIxLnN1YnN0cigwLCBsZW4gLyAyKSk7CiAgICBzdHJpbmcgbmV3U3RyMiA9IG1lcmdlU29ydChzdHIxLnN1YnN0cihsZW4gLyAyLCBsZW4gLSBsZW4gLyAyKSk7CiAgICByZXR1cm4gbWVyZ2UobmV3U3RyMSwgbmV3U3RyMik7CiAgfQp9CgppbnQgbWFpbigpCnsKICBjb3V0IDw8ICciJyA8PCBtZXJnZVNvcnQoIiIpIDw8ICciJyA8PCBlbmRsOwogIGNvdXQgPDwgJyInIDw8IG1lcmdlU29ydCgiYSIpIDw8ICciJyA8PCBlbmRsOwogIGNvdXQgPDwgJyInIDw8IG1lcmdlU29ydCgiYmEiKSA8PCAnIicgPDwgZW5kbDsKICBjb3V0IDw8ICciJyA8PCBtZXJnZVNvcnQoIjEzMiIpIDw8ICciJyA8PCBlbmRsOwogIGNvdXQgPDwgJyInIDw8IG1lcmdlU29ydCgiNDMyMSIpIDw8ICciJyA8PCBlbmRsOwogIGNvdXQgPDwgJyInIDw8IG1lcmdlU29ydCgiNTQzMjEiKSA8PCAnIicgPDwgZW5kbDsKICByZXR1cm4gMDsKfQo=