我的合并排序实现哪里出错了?

Where is mistake in my Merge Sort implementation?

我正在学习排序算法并尝试实现 merge sort。我正在使用 C++ 编程语言。整个排序算法分为两个函数——mergeSort(将数组拆分为更小的部分)和 merge(合并已排序的数组)。请看下面我的代码

#include <iostream>
#include <vector>

void display(std::vector<int> arr)
{
  for (int i = 0; i < arr.size(); ++i)
    {
      std::cout << arr[i] << ' ';
    }
  std::cout << std::endl;
}

std::vector<int> merge(std::vector<int> arr, std::vector<int> left, std::vector<int> right)
{
  int k = 0, i = 0, j = 0;
  while ((i < left.size()) && (j < right.size()))
    {
      if (left[i] <= right[j])
    {
      arr[k] = left[i];
      ++i;
    }
      else if (left[i] > right[j])
    {
      arr[k] = right[j];
      ++j;
    }
      ++k;
    }
  while (i < left.size())
    {
      arr[k] = left[i];
      ++i;
      ++k;
    }
  while (j < right.size())
    {
      arr[k] = right[j];
      ++j;
      ++k;
    }
  return arr;
}

std::vector<int> mergeSort(std::vector<int> arr)
{
  if (arr.size() < 2) return arr;
  int mid = arr.size() / 2;
  std::vector<int> left{};
  std::vector<int> right{};
  for (int i = 0; i < mid; ++i)
    {
      left.push_back(arr[i]);
    }
  for (int j = mid; j < arr.size(); ++j)
    {
      right.push_back(arr[j]);
    }
  left = mergeSort(left);
  right = mergeSort(right);
  merge(arr, left, right);
  return arr;
}

int main()
{
  std::vector<int> arr{6,2,3,1,9,10,15,13,12,17};
  display(mergeSort(arr));
  return 0;
}

我的代码无法正常工作,例如它 returns

6 2 3 1 9 10 15 13 12 17

当我尝试排序时

6 2 3 1 9 10 15 13 12 17

但是我找不到我的错误。如果有人指出,我将不胜感激。

您在 mergeSort 中的 merge(arr, left, right) 调用实际上并未将 leftright 合并到 arr 中。它 returns 一个新数组代替。相反,写:

arr = merge(arr, left, right);