合并排序程序对我要排序的数组没有任何作用

问题描述

我是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) {

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...