c++ - 在冒泡排序中使用递归
问题描述
大家好,我开始学习数据结构和算法,并在学习了概念后自己实现了冒泡排序。以下是我根据自己的理解编写的代码,但问题是它只运行一个周期并且不会递归排序。
- 例如:
{ 5,1,4,2,8} 排序一次 -> {1,4,2,5,8,}
可能是什么问题?
vector<int> bubble_sort(vector<int> vec){
int temp = 0;
for(int i = 0; i < vec.size()-1; i++){
temp = vec.at(i+1); // holds the adjacent element.
// the following loop swaps the adjacent elements if the previous one is big
if(vec.at(i) > vec.at(i+1)){
vec.at(i+1) = vec.at(i);
vec.at(i) = temp;
}
temp = 0;
}
for(int i = 0; i < vec.size()-1; i++){
if(vec.at(i) > vec.at(i+1)){
bubble_sort(vec);
}
}
return vec;
}
解决方案
您的函数vector<int>
逐个复制一个向量,因此在第一次交换之后,只有这个副本被发送到递归排序。
只需添加&
到您的函数参数:vector<int> bubble_sort(vector<int> &vec)
它应该可以工作
推荐阅读
- reactjs - 显示当前日期日历反应?
- airflow - 气流导入错误 - UI 中损坏的 dag 消息
- prolog - 如何从 pwsip 导入 Prolog
- wpf - 从另一个线程绑定和更新
- javascript - 'v-bind' 指令需要一个属性值 - 带有动态数据
- upload - s3cmd - 删除失败的分段上传占用空间并收费
- javascript - Crud MEAN Dron 地理定位
- node.js - Node.js flash 任务栏图标?
- python-behave - 在 PyBehave 中使用示例时,您可以在一个步骤中将它们输入到表格中吗?
- c++ - 链接器在包含目录中找不到实现