Este é meu código:
#include <iostream>
#include <vector>
using namespace std;
int BubbleSort(vector<int>, int);
int main(){
vector<int> lista_y2 {1, 2, 0};
cout << BubbleSort(lista_y2, lista_y2.size()) << endl;
cout << lista_y2[0] << lista_y2[1] << lista_y2[2] << endl;
return 0;
}
int BubbleSort(vector<int> lista_y2, int m){
int swaps{0};
for (int fim {m-1}; fim >= 0; fim--){
for (int inicio {0}; inicio < fim; inicio++){
if (lista_y2[inicio] > lista_y2[inicio+1]){
lista_y2[inicio] = lista_y2[inicio+1] + lista_y2[inicio];
lista_y2[inicio+1] = lista_y2[inicio] - lista_y2[inicio+1];
lista_y2[inicio] = lista_y2[inicio] - lista_y2[inicio+1];
swaps++;
}
}
}
return swaps;
}
Ele retorna os swaps como deveria. Mas quando tento imprimir os elementos do lista_y2, ele não mudou depois do BubbleSort. Alguém pode me ajudar a consertar isso, por favor?
Você precisa passar
std::vector
by reference , ou const reference se a função não modificar o parâmetro. Passar por referência permite que sua função modifique o parâmetro.Por exemplo:
int BubbleSort(vector<int>& lista_y2, int m)
Você deve passar todos os tipos de dados grandes por referência para que o compilador não faça cópias.