lundi 4 juillet 2016

merge sort segmentation error, works with visual studio compilers

i have implemented two functions for my merge_sort, the first one divides the array and the last it does the merge_sort, when i run it using visual studio it works fine but using school's compilers it, gives me a segmentation error, now im trying to figure out the error but no luck since hw is graded based on using and school's compilers, can you guys help, this is what i have working on visual studio,

 template<typename T>
void merge(std::vector<T>& left, 
           std::vector<T>& right, 
           std::vector<T>& vector)
{
  size_t i = 0;
  size_t j = 0;
  size_t k = 0;

  auto leftSide = left.size();
  auto rightSide = right.size();


  while(i < leftSide && j < rightSide)
  {
    if(left[i] <= right[j])
      vector[k] = std::move(left[i++]);
    else
      vector[k] = std::move(right[j++]);

    ++k;
  }

  while(i < leftSide) 
    vector[k++] = std::move(left[i++]);

  while(j < rightSide)
    vector[k++] =  std::move(right[j++]);
  }



template<typename T>
void merge_sort(std::vector<T>& vector)
{
  auto value = vector.size();
  auto middle = value / 2;

  std::vector<T> left(middle);

  std::vector<T> right(value - middle);


  for(size_t i = 0; i < middle; ++i)
    left[i] = std::move(vector[i]);

  for(size_t i = middle; i < value; ++i)
    right[i-middle] = std::move(vector[i]);

  merge_sort(left);
  merge_sort(right);
  merge(left, right, vector);
}

Aucun commentaire:

Enregistrer un commentaire