Я прочитал и понял, как работает Mergesort (как текст), и теперь я пытаюсь его кодировать.Я закончил ту часть, где вы делите данные (я использую векторы) до тех пор, пока они не получат каждый размер 1. Теперь я написал код для другой необходимой части в Mergesort, я не знаю, как это назвать, но я просто называю это "сравнить и упорядочить часть ".
У вас есть 2 вектора, и эта часть должна сравнить самые первые элементы, взять меньший элемент, затем удалить выбранный элемент и поместить его в новый вектор.Делая это, пока оба вектора не будут иметь размер 0.
Извините за длинный код, но я действительно не понимаю, почему последний элемент игнорируется кодом?: / Я добавил несколько комментариев, так что, возможно, легче следовать тому, что я пытался сделать.
Я пробовал как вход :
vector<int> v1 = {1,4,5,9};
vector<int> v2 = {2,3,6,7,8};
Выход :
1 2 3 4 5 6 7 8 0
vector<int> sortit(vector<int> &left, vector<int> &right) {
vector<int> sorted(left.size() + right.size());
int i = 0;
while (left.size() > 0 && right.size() > 0) {
if (left.at(0) <= right.at(0)) {
sorted.at(i) = left.at(0); // putting the smaller element into the new vector
left.erase(left.begin()); // removing this smaller element from the (old) vector
}
else if (right.at(0) <= left.at(0)) {
sorted.at(i) = right.at(0); // see comment above
right.erase(right.begin()); // see comment above
}
else if (left.size() <= 0 && right.size() > 0) { // if left vector has no elements, then take all elements of the right vector and put them into the new vector
while (right.size() > 0) {
sorted.at(i) = right.at(0);
right.erase(right.begin());
}
}
else if (right.size() <= 0 && left.size() > 0) { // the same just for the right vector
while (left.size() > 0) {
sorted.at(i) = left.at(0);
left.erase(left.begin());
}
}
i++;
}
return sorted;
}