У меня проблема с реализацией сортировки слиянием с векторами.В настоящее время у меня правильная реализация, так как я попробовал ее с массивами, и она работала, но когда я попытался включить вектор, я просто столкнулся с проблемами.Я знаю свою проблему, однако мое решение не работает.
Here is the entire code:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void print(vector<int> x)
{
for (int i =0; i<9; i++)
{
cout << x[i] << " ";
}
cout << endl;
}
void merge(int low, int high, vector<int> x)
{
int mid = (low+high)/2;
int leftC = low;
int rightC = mid+1;
int tempC = low;
int arr[9];
while (leftC <= mid && rightC <= high)
{
if(x[leftC] < x[rightC]){
cout << "LC++Temp: " << x[leftC] << endl;
arr[tempC++] = x[leftC++];
}
else {
cout << "RC++Temp: " << x[leftC] << endl;
arr[tempC++] = x[rightC++];
}
}
if(leftC > mid)
{
for (int k =rightC; k<=high; k++)
{
cout << "Inserteted: " << x[k] << endl;
arr[tempC] = x[k];
tempC++;
}
}
else {
for(int k=leftC; k<=mid;k++)
{
cout << "Inserteted: " << x[k] << endl;
arr[tempC] = x[k];
tempC++;
}
}
cout << "Done cycle" << endl;
cout << "arr: ";
for(int k=low;k<=high;k++) {
cout << arr[k] << " ";
}
cout << endl;
for(int k=low;k<=high;k++) {
x[k]=arr[k];
}
cout << "New x: ";
print(x);
}
void mergeSort(int low, int high, vector<int> x)
{
if (high>low)
{
int mid = (low+high)/2;
cout<< "LEFT Merge( " << low << "," << mid << " )" << endl;
mergeSort(low,mid,x);
cout<< "RIGHT Merge( " << mid+1 << "," << high << " )" << endl;
mergeSort(mid+1,high,x);
cout << "NORMAL merge( " << low << "," << high << " )" << endl;
merge(low,high,x);
cout << "Function X: ";
print(x);
}
}
void mergeSort(vector<int> x)
{
int size = 9;
mergeSort(0,size-1,x);
}
int main() {
vector<int> x = {10,52,2,5,15,89,56,11,99};
print(x);
mergeSort(x);
print(x);
}
Проблема возникает здесь:
for(int k=low;k<=high;k++) {
x[k]=arr[k];
}
cout << "New x: ";
print(x);
}
, где мой вектор x остается тем же после того, как я изменяю содержимое внутри него.Я попытался передать вектор в качестве ссылки, но он по-прежнему возвращает исходные целые числа, а не новые значения обновления, что в свою очередь отбрасывает мой алгоритм.