C++ 合并排序中的奇怪错误
我刚刚在mergesort中编写了以下简单的合并函数,它完全遵循CLRS手册中编写的函数C++ 合并排序中的奇怪错误,c++,mergesort,divide-and-conquer,C++,Mergesort,Divide And Conquer,我刚刚在mergesort中编写了以下简单的合并函数,它完全遵循CLRS手册中编写的函数 #include<iostream> #include<vector> #include<limits> using namespace std; //Define the numerical positive infinity const int INFP = numeric_limits<int>::max(); void MERGE(vector&
#include<iostream>
#include<vector>
#include<limits>
using namespace std;
//Define the numerical positive infinity
const int INFP = numeric_limits<int>::max();
void MERGE(vector<int> A, int p, int q, int r){
//Create the size of left and right array
int n1 = q-p+1;
int n2 = r-q;
//Create the left array
vector<int> L(n1+1);
for(int i=0; i<n1;i++){
L[i] = A[i];
}
L[n1] = INFP; //Insert sentinel here!
//Create the right array
vector<int> R(n2+1);
for(int i=0; i<n2;i++){
R[i] = A[q+i+1];
}
L[n2] = INFP; //Insert sentinel here!
int i = 0;
int j = 0;
for(int k = 0; k <= r; k++){
if(L[i]<=R[j]){
A[k] = L[i];
i=i+1;
}
else{
A[k] = R[j];
j=j+1;
}
}
for(int m=0;m<4;m++){
cout<< A[m] << " ";
}
cout << endl;
}
int main(){
//test for merge function:
vector<int> A(4);
A[0]=1;
A[1]=3;
A[2]=2;
A[3]=4;
MERGE(A,0,1,3);
for(int m=0;m<4;m++){
cout<< A[m] << " ";
}
cout << endl;
return 0;
}
我不知道是不是空函数的问题,我不能用空函数来表示向量或其他东西
真希望有人能帮我。谢谢 这是因为您通过值传递向量,这意味着您修改了本地副本。而是通过引用传递。这是因为您通过值传递向量,这意味着您修改了本地副本。而是通过引用来传递。注意:我已经可以告诉你一个“错误”。您正在按值传递向量。即使您的代码工作正常,调用方也看不到您的工作成果。您可以使用And/or使算法变得非常简单。注意:我已经可以告诉你一个“bug”。您正在按值传递向量。即使您的代码工作正常,调用方也看不到您的工作成果。您可以使用And/or使算法变得非常简单。事实上,它变得非常琐碎。你能给我一个如何通过引用传递它的例子吗?谢谢@CCAN可以,任何初学者的书籍或教程都可以清楚地解释C++语言。如果你没有,好吧,我刚意识到我太懒了,但我已经明白了。谢谢你能给我举个例子说明如何通过参考传递吗?谢谢@CCAN可以,任何初学者的书籍或教程都可以清楚地解释C++语言。如果你没有,好吧,我刚意识到我太懒了,但我已经明白了。谢谢
1 2 3 4
1 3 2 4