C++ 合并合并排序的代码-验证

C++ 合并合并排序的代码-验证,c++,sorting,C++,Sorting,我在这里找到了这个merge_排序的例子。我正在分解算法,以便在快速排序的上下文中理解alogrithm 编辑: 我已经更新/修复了代码,并将其作为答案发布在下面。这是一个有效的合并排序。这里发布的代码在可读性方面可能需要一些改进……它们就在这里。已验证这是一个有效的合并\u排序: #include "c_arclib.cpp" void merge_helper(int *input, int left, int right, int *scratch) { if(right == l

我在这里找到了这个merge_排序的例子。我正在分解算法,以便在快速排序的上下文中理解alogrithm

编辑:


我已经更新/修复了代码,并将其作为答案发布在下面。这是一个有效的合并排序。

这里发布的代码在可读性方面可能需要一些改进……它们就在这里。已验证这是一个有效的合并\u排序:

#include "c_arclib.cpp"
void merge_helper(int *input, int left, int right, int *scratch)
  {
  if(right == left + 1)
    {
    return;
    }
  else
    {
    int i = 0;
    int length = right - left;
    int midpoint_distance = length/2;
    int l = left, r = left + midpoint_distance;
    merge_helper(input, left, left + midpoint_distance, scratch);
    merge_helper(input, left + midpoint_distance, right, scratch);
    for(i = 0; i < length; i++)
      {
      if((l < (left + midpoint_distance)) && (r == right || input[l] > input[r]))
        {
        scratch[i] = input[l];
        l++;
        }
      else
        {
        scratch[i] = input[r];
        r++;
        }
      }
    for(i = left; i < right; i++)
      {
      input[i] = scratch[i - left];
      }
    }
  }
int merge_sort(int *input, int size)
  {
    int *scratch = (int *)malloc(size * sizeof(int));
    if(scratch != NULL)
    {
        merge_helper(input, 0, size, scratch);
        free(scratch);
        return 1;
    }
    else
    {
        return 0;
    }
  }

int main()
  {
  int size=1000;
  int* array = new int[size]();
  util::rand_to_array(array,size);
  util::print_array(array, size);
  merge_sort(array, size);
  cout << endl; util::print_array(array, size);
  return 0;
  }
#包括“c_arclib.cpp”
void merge_helper(int*input、int left、int right、int*scratch)
{
如果(右==左+1)
{
返回;
}
其他的
{
int i=0;
int长度=右-左;
int中点距离=长度/2;
int l=左,r=左+中点距离;
合并辅助对象(输入、左、左+中点距离、划痕);
合并辅助对象(输入,左+中点距离,右,划痕);
对于(i=0;i输入[r]))
{
划痕[i]=输入[l];
l++;
}
其他的
{
划痕[i]=输入[r];
r++;
}
}
for(i=left;i