[英]MergeSort and Merge C++
在我的学校作业中,我的MergeSort()
和Merge()
有问题。 我是 C++ 的新手(我已经辍学两年了,他们用新课程改变了我的专业。我正在学习 java ......)长话短说,我的Merge()
和MergeSort()
函数不起作用在我调试它们时在 VS Code 中。 我在使用 function 时遇到问题。 我不知道我是否正确传递了参数。
我试图通过将Merge()
function 向上移动来更改 MergeSort 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;
}
我只是想了解发生了什么。 我试图在逻辑上做到这一点,但结果太混乱了。 output 应该是 5,10,20,40,50,60,90
merge() 不应该通过引用来获取参数,使用 int lStart 而不是 int &lStart。 rStart 将始终为 lEnd + 1,因此合并只需要 3 个参数。 合并中的 if 应该是 lStart <= lEnd。
虽然不是问题,但如果 main 的初始调用是 MergeSort(B, 0, length),则代码会更简单一些。 然后可以使用 (B, start, middle, end) 调用 Merge。 merge() 中的循环将具有... lStart < middle... rStart < end... 对于循环和 if 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.