没有输出的合并排序我做错了什么?

  • 本文关键字:错了 排序 输出 合并 c++
  • 更新时间 :
  • 英文 :


我正在努力理解为什么我没有得到输出?

我正在尝试学习如何实现合并排序算法。我这样做的方法是首先连接两个向量,然后实现一个函数来对连接的向量进行排序。

我是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做类似的事情.

这是一个演示。

最新更新