私は自分自身をテストしようとしていて、実際にオンラインでコードを調べずに、特定の期間内にマージソートを書きたいと思っていました。私が覚えている限り、マージソートは、文字列が1文字になるまで文字列を分割し、後でそれらをマージすることであるため、私が間違っていることを単純に理解できないこの時点で立ち往生しています。私が以下に書いたコードは、正確なことをしようとします。コンセプトが間違っているのか、実装だけなのか疑問に思っていました。
string merge(string str1, string str2) {
string final = "";
int i = 0, j = 0;
bool fromStr1 = false;
while(true) {
if(str1[i] < str2[j]) {
final += str1[i];
i++;
if(i == str1.size()) {
break;
}
}
else {
final += str2[j];
j++;
if(j == str2.size()) {
break;
fromStr1 = true;
}
}
}
if(fromStr1) {
for(int t = i; t < str1.size(); t++) {
final += str1[t];
}
}
else {
for(int t = j; t < str2.size(); t++) {
final += str2[t];
}
}
return final;
}
string mergeSort(string str1, int start, int end) {
if(end - start == 1)
return str1;
else {
int pivot = (end - start) / 2;
string newStr1 = mergeSort(str1, start, pivot);
string newStr2 = mergeSort(str1, pivot + 1, end);
return merge(newStr1, newStr2);
}
}