C++ C+中的合并排序+;-程序的奇怪行为
更新:在合并函数中修改了条件,现在一切正常 我试图在C++中实现一个合并整数向量的合并排序算法。下面是我的代码:C++ C+中的合并排序+;-程序的奇怪行为,c++,mergesort,C++,Mergesort,更新:在合并函数中修改了条件,现在一切正常 我试图在C++中实现一个合并整数向量的合并排序算法。下面是我的代码: #include <vector> #include <iostream> using namespace std; void Vout (vector <int> V){ for (int i = 0; i<V.size(); i++) cout << V[i] << "\t";
#include <vector>
#include <iostream>
using namespace std;
void Vout (vector <int> V){
for (int i = 0; i<V.size(); i++)
cout << V[i] << "\t";
cout << endl;
}
vector <int> merge (vector <int> B, vector <int> C){
vector <int> D;
int n = B.size() + C.size();
int i=0, j=0;
for (int k = 0; k<n; k++){
if( ( B[i]<C[j] || j == C.size() ) && i<B.size() ){ //was like this: if( B[i]<C[j] ){
D.push_back(B[i]);
i++;
}
else{
D.push_back(C[j]);
j++;
}
}
return D;
}
vector <int> merge_sort(vector <int> A){
int n = A.size();
if (n<=1) return A;
vector <int> B, C;
for (int i = 0; i<n/2; i++)
B.push_back(A[i]);
for (int i = n/2; i<n; i++)
C.push_back(A[i]);
B = merge_sort(B);
C = merge_sort(C);
vector <int> D = merge(B, C);
return D;
}
int main() {
vector <int> data;
freopen("input.txt", "rt", stdin);
int n;
while (cin >> n){
data.push_back(n);}
Vout (data);
Vout (merge_sort(data));
}
#包括
#包括
使用名称空间std;
无效Vout(向量V){
对于(int i=0;i您的merge()
函数不处理从B
或C
向量的末尾运行;当它到达任一向量的末尾时,您的比较(B[i]您的merge()
函数不处理从B
或C
向量的末尾运行;当它到达这两个向量的末尾时,您的比较(B[i]我修改了下面给出的合并函数,它工作了
vector <int> merge (vector <int> B, vector <int> C){
vector <int> D;
int n = B.size() + C.size();
int i=0, j=0;
for (int k = 0; k<n; k++){
if(B[i]<C[j]){
D.push_back(B[i]);
i++;
if(i == B.size())
break;
}
else{
D.push_back(C[j]);
j++;
if(j == C.size())
break;
}
}
if(i == B.size())
{
while(j < C.size())
D.push_back(C[j++]);
}
if(j == C.size())
{
while(i < B.size())
D.push_back(B[i++]);
}
return D;
}
向量合并(向量B、向量C){
载体D;
int n=B.大小()+C.大小();
int i=0,j=0;
对于(int k=0;k我修改了下面给出的合并函数,它工作了
vector <int> merge (vector <int> B, vector <int> C){
vector <int> D;
int n = B.size() + C.size();
int i=0, j=0;
for (int k = 0; k<n; k++){
if(B[i]<C[j]){
D.push_back(B[i]);
i++;
if(i == B.size())
break;
}
else{
D.push_back(C[j]);
j++;
if(j == C.size())
break;
}
}
if(i == B.size())
{
while(j < C.size())
D.push_back(C[j++]);
}
if(j == C.size())
{
while(i < B.size())
D.push_back(B[i++]);
}
return D;
}
向量合并(向量B、向量C){
载体D;
int n=B.大小()+C.大小();
int i=0,j=0;
对于(int k=0;ky您的问题是在合并函数中,不要让i或j大于向量的大小!确实这是一个问题您的问题是在合并函数中,不要让i或j大于向量的大小!确实是一个问题,但仍然需要等待6分钟才能接受。您的回答太快:)当然可以,但仍需要等待6分钟才能接受。您的回答太快:)