我正在努力理解为什么我没有得到输出?
我正在尝试学习如何实现合并排序算法。我这样做的方法是首先连接两个向量,然后实现一个函数来对连接的向量进行排序。
我是C++编程新手。
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int> &array1, vector<int> &array2){
vector<int> mergeArray;
mergeArray.insert(mergeArray.end(), array1.begin(), array1.end());
mergeArray.insert(mergeArray.end(), array2.begin(), array2.end());
}
void sort(vector<int> &mergeArray, vector<int> &sortedArray, int n, int i){
if(n==0){
return;
}
if(mergeArray[i]>mergeArray[i+1]){
sort(mergeArray,sortedArray,n-1,i+1);
sortedArray.push_back(mergeArray[i+1]);
}
else{
sort(mergeArray,sortedArray,n-1,i+1);
sortedArray.push_back(mergeArray[i]);
}
for(int x=0; x<sortedArray.size(); x++){
cout << sortedArray[x];
}
}
int main()
{
vector<int> array1 = {5,4,2};
vector<int> array2 = {3,7,1};
vector<int> mergeArray;
vector<int> sortedArray;
merge(array1,array2);
sort(mergeArray,sortedArray,mergeArray.size() + sortedArray.size(),0);
return 0;
}
merge
中的mergeArray
向量是函数的局部向量,main
无法看到对mergeArray
的更改。
您可以将数组作为引用参数传入,而不是将其声明为局部变量:
void merge(vector<int> &mergeArray, vector<int> &array1, vector<int> &array2) {
// ...
}
并像这样称呼merge
:
merge(mergeArray, array1,array2);
请注意,您已经在sort
函数中执行此操作。你需要为merge
做类似的事情.
这是一个演示。