сортировка слиянием по массиву строк

Я пытаюсь отсортировать массив строк с помощью алгоритма сортировки слиянием. Я написал этот код, и он работает для массивов целых чисел, но на удивление для массива строк нет! Кажется, что он просто сортирует вторую часть массива. Я понятия не имею, что кусок не так в этом коде! Буду признателен за вашу помощь.

#include <iostream> #include <list> #include <string> using namespace std; void MergeSortA(int low , int high); void MergeA(int low ,int mid ,int high); string currentArray[5]; int main() { for(int i = 0; i < 5; i++) cin >> currentArray[i]; MergeSortA(0,4); for(int i = 0; i < 5; i++) cout << currentArray[i] <<endl; return 0; } void MergeSortA(int low , int high) { int mid = 0; if(low < high) { mid = ((low+high)/2); MergeSortA(low , mid); MergeSortA(mid+1,high); MergeA(low,mid,high); } } void MergeA(int low ,int mid , int high) { int i = low, j = mid+1 , k = low; string Temp[5]; while(i <= mid && j <= high) { if( currentArray[i] < currentArray[j] ) { Temp[k].assign(currentArray[i]); i++; } else { Temp[k].assign(currentArray[j]); j++; } k++; } if(i > mid ) { for(int h = j ;h <= high ; h++ ) { Temp[k].assign(currentArray[h]); k++; } } else for(int h = i; h<= mid ; h++ ) { Temp[k].assign(currentArray[h]); k++; } for(int i = 0; i <= high ; i++) { currentArray[i].assign(Temp[i]); } }

4

Решение

Вам нужно исправить при копировании значений обратно в currentArray от температура массив:

for(int i = low; i <= high ; i++) //copy from low to high
{
currentArray[i].assign(Temp[i]);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]