【发布时间】:2016-02-12 22:35:14
【问题描述】:
我正在学习算法课程,并试图在 C++ 中实现合并排序。我试图存储一个左右子数组,但意识到我无法这样做,因为我无法在运行时初始化大小。有没有办法解决这个问题,还是我的排序过程不正确?我在下面列出了我所拥有的。
我也尽量避免使用向量,因为那太明显太容易了。
void merge(int *arr, int left, int mid, int right)
{
int size1 = mid - left + 1;
int size2 = right - mid;
int leftArr[size1];
int rightArr[size2];
....
}
void mergeSort(int *arr, int left, int right)
{
if (left < right)
{
int mid = (left + right) / 2;
mergeSort(arr, mid+1, right);
mergeSort(arr, left, mid);
merge(arr, left, mid, right);
}
}
【问题讨论】:
-
尝试
int *leftArr并使用new []和delete []。更好的是,熟悉std::vector。你用 C++ 编写代码,但这真的是 C。 -
我也在尽量避免使用向量,因为这太明显太容易了。 -- 使用明显的东西有什么问题?使代码变得比应有的更难并不会赢得分数。
-
@PaulMcKenzie,不想让它变得更难。更多的学习经验。我知道向量是可能的,我绝对可以用向量来做到这一点。不幸的是,学校教育不是这样。必须了解教授希望它如何完成。
-
@AmiTavory,谢谢,我会试试的。 C 语法也与 C++ 非常相似。这确实是 C++。
-
好吧,我们不知道你们学校想要什么。 C++ 中动态数组的明显答案是使用向量。此外,您仍然必须实现合并排序——使用向量仅有助于您不必担心泄漏或指针管理不善。使用向量不会神奇地为您创建合并排序功能。至于学习,为什么老师不让你创建一个动态数组类,然后在进一步的作业中使用它?
标签: c++ sorting merge mergesort