合并排序 C++ - 程序的奇怪行为
Merge sort in C++ - strange behavior of a program
更新:合并函数中的修改条件,现在一切正常
我正在尝试在 c++ 中实现一种与 intege 向量一起使用的合并排序算法。所以这是我的代码段:
#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));
}
但是有了这个输入
5 4 6 7 9 1 2 8 3 12 10
它给出以下输出:
1 2 3 0 4 5 6 7 8 9 0
我不太明白所有这些零是从哪里来的。请帮忙。
你的merge()
函数不能处理B
或C
向量的末尾;当它到达任何一个向量的末尾时,你的比较(B[i]<C[j]
)将与数组末尾的比较进行比较。
我修改了下面给出的合并函数,它起作用了。
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;
}
相关文章:
- 使用C++程序合并排序没有得到正确的输出
- 显示错误输出的简单数组排序程序
- 在气泡排序程序中未声明错误功能
- 在自定义程序中使用本机 Windows 自然顺序排序
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 我的排序算法程序中的堆错误
- 无法在基于 DFS 的任务排序程序中填充"stack"
- 排序程序的意外错误代码
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 无法在 Visual Studio 程序中运行合并排序
- OOP 气泡排序C++程序
- 编写程序,导入三个浮点数a,b和c.按升序排序
- 尝试对对象数组进行排序时程序终止
- 家庭作业的排序链表程序中的分段错误
- 试图理解合并排序程序
- 排序程序的错误(检测到堆损坏)
- 字母选择排序程序的问题
- 这个合并排序程序有什么问题
- 我正在尝试为 Kruskal 算法实现一个C++程序,该程序需要我按权重对图形进行排序。如何按权重对结构进行排序
- 程序排序三个整数值