C++ 排序函数调用后数组未更改
当使用插入排序的实现对向量进行排序时,作为参数传递的数组不会因此改变 我以前尝试过这个,但找不到我的问题,希望能得到一些帮助C++ 排序函数调用后数组未更改,c++,sorting,C++,Sorting,当使用插入排序的实现对向量进行排序时,作为参数传递的数组不会因此改变 我以前尝试过这个,但找不到我的问题,希望能得到一些帮助 #include <iostream> #include <vector> #include <cstdlib> #include <algorithm> using namespace std; void insertionSort(vector<int> arr); int main() { vect
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
using namespace std;
void insertionSort(vector<int> arr);
int main() {
vector<int> vec;
const int arrSize = 5;
for(int i = 0; i < arrSize; i++) {
vec.push_back(rand() % 10); // 3 6 7 5 3
}
for (auto i : vec) cout << i << endl; // 3 6 7 5 3
insertionSort(vec);
for (auto i : vec) cout << i << endl; // 3 6 7 5 3
}
void insertionSort(vector<int> arr) {
for(int i = 0; i < arr.size() - 1; i++) {
int j = i + 1;
while(j > 0 && arr[j - 1] > arr[j]) {
swap(arr[j - 1], arr[j]);
j--;
}
}
for (auto i : vec) cout << i << endl; // 3 3 5 6 7
}
#包括
#包括
#包括
#包括
使用名称空间std;
void insertionSort(向量arr);
int main(){
向量向量机;
常数int arrSize=5;
对于(int i=0;i for(auto i:vec)cout参数是按值复制的,除非传递了引用。若要修改传入的对象,请改用引用
传递一个向量&arr
,而不仅仅是向量arr
。注意和
另一种方法是返回已排序的数组并将其分配给旧的未排序数组
一些提示:
在rand
之前,请调用srand
以使用种子初始化PRNG。从C++11开始,还有
,无论如何,您都应该喜欢它
std::endl
刷新流缓冲区。'\n'
不刷新流缓冲区,但具有相同的视觉效果。支持'\n'
,除非您确实想要刷新流缓冲区。尤其是在循环中,重复刷新是多余和低效的
对STL数据结构使用适当的大小类型。对于std::vector
,这是std::vector::size\u type
a.k.a.std::size\u t
。与数组相同,顺便说一句。使用std::size\u t
std::vector::size
也返回std::size\u t
,而不是intde>