gpt4 book ai didi

c++ - C++ 中的合并排序 - 程序的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 00:50:04 27 4
gpt4 key购买 nike

更新:修改合并函数中的条件,现在一切正常

我正在尝试在 C++ 中实现一个合并排序算法,该算法与整数 vector 一起使用。所以这是我的一段代码:

#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 vector ;当它到达其中一个的末尾时,您的比较 ( B[i]<C[j] ) 将与数组末尾的一个进行比较。

关于c++ - C++ 中的合并排序 - 程序的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com