【发布时间】:2019-09-22 04:35:29
【问题描述】:
在我的学校作业中,我的 MergeSort() 和 Merge() 有问题。我是 C++ 新手(我已经辍学两年了,他们改变了我的专业,开设了新课程。我正在学习 java ......)长话短说,我的 Merge() 和 MergeSort() 函数不起作用在我调试它们时在 VS Code 中。我在使用该功能时遇到问题。我不知道我是否正确传递了参数。
我尝试通过将Merge() 函数向上移动到MergeSort() 上方来更改它。
void Merge(int B[], int &lStart, int &lEnd, int &rStart, int &rEnd) {
int length;
int temp[length];
int theSaved = lStart;
int i = lStart;
while (lStart < lEnd && rStart <= rEnd) {
if (B[lStart] < B[rStart]) {
temp[i++] = B[lStart++];
}
else {
temp[i++] = B[rStart++];
}
}
while (lStart <= lEnd) {
temp[i++] = B[lStart++];
}
while (rStart <= rEnd) {
temp[i++] = B[rStart++];
}
for (int j = theSaved; j < rEnd; j++) {
B[j] = temp[j];
}
}
void MergeSort(int B[], int start, int end) {
int middle;
int theMiddle = middle + 1;
if (start < end) {
middle = (start + end) / 2;
MergeSort(B, start, middle);
MergeSort(B, middle + 1, end);
Merge(B, start, middle, theMiddle, end);
}
}
int main() {
int length = 7;
int begin = 0;
int end = (length - 1);
int B[length] = {10, 50, 90, 60, 5, 20, 40};
for (int i = 0; i < length; i++) {
MergeSort(B, begin, end);
cout << "\n" << B[i];
}
return 0;
}
我只是想了解正在发生的事情。我试图在逻辑上做到这一点,但结果太混乱了。输出应该是 5,10,20,40,50,60,90
【问题讨论】:
-
使用
std::sort或std::stable_sort。或者至少使用std::inplace_merge。如果这也不可行,请在设计界面时尝试模仿标准算法。通过引用传递索引并在函数中修改它们确实令人困惑。 -
我应该使用什么 IDE?我目前有 eclipse、vs 代码、armercode、netbeans。配置一个并不容易。我正在使用 VS 代码 n 我已经遇到了调试器的特殊问题
-
您可以考虑使用 Visual Studio(而不是 VS Code),但 VS 不支持变长数组。您可以使用 _alloca 获得等价物。
标签: c++ mergesort insertion-sort