Merge Sort C++实现,无法识别代码中的错误

Merge Sort C++ implementation, Cannot identify the bug in the code

本文关键字:代码 识别 错误 Sort C++ 实现 Merge      更新时间:2023-10-16

我尝试使用std::vector在C++中实现合并排序。我认为逻辑没有任何问题。然而,当我运行代码时,我会得到一个比原始数组大且未排序的数组。有人能告诉我我的代码出了什么问题吗?

void  merge(vector<double>& x,
            vector<double>& y,
            vector<double>& merged )
{
   int sze_x = x.size();
   int sze_y = y.size();
   int i =0, j=0;
   while (i< sze_x && j < sze_y)
   {
      if(x[i] <= y[j])
      {
         merged.push_back(x[i]);
         ++i;
      }
      else
      {
         merged.push_back(y[j]);
         ++j;
      }
   }
   if(i >= sze_x)
   {
      for(int l =j; l != sze_y; l++)
      {
         merged.push_back(y[l]);
      }
   }
   else
   {
      for(int l =i; l != sze_x; l++)
      {
         merged.push_back(x[l]);
      }
   }
}
void split (vector<double> &A, vector<double> &A_1, vector<double> &A_2)
{
   int mid = A.size()/2;
   int sze = A.size();
   for(int i =0; i!=sze;i++)
   {
      if(i<mid) A_1.push_back(A[i]);
      else
         A_2.push_back(A[i]);
   }
}
void merge_sort(vector<double>  &arr)
{
   if(arr.size()>1)
   {
      vector<double> arr1, arr2;
      split(arr,arr1,arr2);
      merge_sort(arr1);
      merge_sort(arr2);
      merge(arr1,arr2,arr);
   }
}

当您调用时

 merge(arr1,arr2,arr);

CCD_ 2仍然具有其所有原始内容。在merge中调用push_backmerged之前,不清除内容。

添加

arr.clear();

在上述行之前,或添加

merged.clear();

在CCD_ 7语句之前的CCD_。

merged.clear();
while (i< sze_x && j < sze_y)