合并排序分段错误,适用于visual studio编译器

时间:2016-07-05 02:56:07

标签: sorting c++11

我已经为我的merge_sort实现了两个函数,第一个用于分割数组,最后一个用于进行merge_sort,当我使用visual studio运行它时工作正常但是使用了学校的编译器,它给了我一个细分错误,现在我试图找出错误,但没有运气,因为hw基于使用和学校的编译器评分,你们可以帮助,这是我在视觉工作室工作,

 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);
}

0 个答案:

没有答案