如何解决合并排序程序对我要排序的数组没有任何作用
我是C ++的新手,正在尝试实现合并排序,但是当我在我的main方法中打印数组时,它仍然保持不变,我不确定为什么会这样。我尝试打印分割后的数组的内容,但是它给了我不确定它来自何处的值。
#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int> left,vector<int> right,vector<int> arr) {
int j = 0;
int k = 0;
int l = 0;
while (j < left.size() && k < right.size()) {
if (left[j] >= right[k]) {
arr[l] = right[k];
k += 1;
l += 1;
} else {
arr[l] = left[j];
j += 1;
l += 1;
}
}
if (j < left.size()) {
for (int i = j + k; i < arr.size(); i++) {
j += 1;
arr[i] = left[j];
}
}
if (k < right.size()) {
for (int i = j + k; i < arr.size(); i++) {
k += 1;
arr[i] = right[k];
}
}
}
void merge_sort(vector<int> arr) {
int n = arr.size();
if (n <2) {
return;
}
int mid = n / 2;
vector<int> left = vector<int>(arr.begin(),arr.end() - mid - 1);
for (int i : left) {
cout << i << " ";
}
cout << "\n";
vector<int> right = vector<int>(arr.begin() + mid,arr.end());
for (int i : right) {
cout << i << " ";
}
cout << "\n";
merge_sort(left);
merge_sort(right);
merge(left,right,arr);
}
int main() {
vector<int> arr = {3,3,4,6,42,2};
merge_sort(arr);
for (int i : arr) {
cout << i << " ";
}
return 0;
}
解决方法
当您将vector
传递给merge_sort
时,正在为其创建副本。对功能中的arr
所做的任何更改将在main
中不可见。
相反,如果您希望函数修改参数,则需要通过引用传递vector
:
void merge_sort(vector<int> &arr) {
// ^ by reference
与merge
类似:
void merge(vector<int> &left,vector<int> &right,vector<int> &arr) {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。