MergeSort с изменением содержимого исходного вектора - PullRequest
0 голосов
/ 16 октября 2018

У меня проблема с реализацией сортировки слиянием с векторами.В настоящее время у меня правильная реализация, так как я попробовал ее с массивами, и она работала, но когда я попытался включить вектор, я просто столкнулся с проблемами.Я знаю свою проблему, однако мое решение не работает.

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 остается тем же после того, как я изменяю содержимое внутри него.Я попытался передать вектор в качестве ссылки, но он по-прежнему возвращает исходные целые числа, а не новые значения обновления, что в свою очередь отбрасывает мой алгоритм.

...