Здравствуйте, проблема в сортировке первого массива string arr, почему-то после сортировки параллельно со вторым массивом arr2, на первом месте оказывается слово из списка arr2. Но если сортировать arr отдельно, то все получается корректно, в чем может быть проблема?
#include <iostream>
#include <string>
void Merge(std::string arr[], std::string arr2[], int begin, int end) {
int i = begin;
int mid = begin + (end - begin) / 2;
int j = mid + 1;
int k = 0;
std::string d[end - begin];
std::string da[end - begin];
while (i <= mid && j <= end) {
if (arr[i] <= arr[j]) {
d[k] = arr[i];
da[k] = arr2[i];
i++;
}
else {
d[k] = arr[j];
da[k] = arr2[i];
j++;
}
k++;
}
while (i <= mid) {
d[k] = arr[i];
da[k] = arr2[i];
i++; k++;
}
while (j <= end) {
d[k] = arr[j];
da[k] = arr2[i];
j++; k++;
}
for (i = 0; i < k; ++i) {
arr[begin + i] = d[I];
arr2[begin + i] = da[i];
}
}
void Merge_Sort(std::string arr[], std::string arr2[], int left, int right) {
if (left < right) {
if (right - left == 1) {
if (arr[left] > arr[right]) {
std::swap(arr[left], arr[right]);
std::swap(arr2[left], arr2[right]);
}
}
else {
Merge_Sort(arr, arr2, left, left + (right - left) / 2);
Merge_Sort(arr, arr2, left + (right - left) / 2 + 1, right);
Merge(arr, arr2, left, right);
}
}
}
int main() {
int n = 3;
std::string arr[n], arr2[n];
arr[0] = "Russia";
arr1[0] = "Alex";
arr[1] = "USA";
arr1[1] = "John";
arr[2] = "China";
arr1[2] = "Li";
Merge_Sort(arr, arr2, 0, n - 1);
std::cout << "=== " << arr[0] << " ===\n";
for (int i = 0; i < n - 1; ++i) {
if (arr[i] == arr[i + 1]) {
std::cout << arr2[i] << '\n';
}
else {
std::cout << arr2[i] << '\n';
std::cout << "=== " << arr[i + 1] << " ===\n";
}
}
std::cout << arr2[n - 1];
return 0;
}
Вывод:
=== John ===
Li
=== Russia ===
Petya
=== USA ===
John