Advertisement

写冒泡排序时遇到的问题及解决办法

阅读量:

背景

在学习C++中的vector时,为了加深理解而设计了一个小练习,于是编写了一个程序来进行向量内部整数的冒泡排序

冒泡排序的原理

第一个版本

#include "bubbleSort.hpp"
#include
#include
using namespace std;
void DISPAY(const vector& vec) {
for(int i=0;i<vec.size();++i) {
cout << vec[i] << " ";
}
cout << endl;
}//定义显示函数
void swap(int a,int b){
int temp =a;
a =b;
b=temp;
}

int temp = val1;
将当前值赋给val1;
将临时变量temp中的值赋给val2;
//用于完成数值的交换操作
}
void bubble_sort(vector vec) {
for循环从索引i=0开始遍历到向量末尾;
内层循环则从j=i+1开始一直到末尾元素;
如果当前元素大于下一个元素;
swap函数将执行交换操作;
}

函数main的实现{
生成一个名为array的整型数组,并赋值为{8 45 34 67 12 39 9 2};
生成一个向量vec并将其赋值为array指针;
输出信息提示"向量在排序前的内容:";
调用函数display并传递vec参数;
对向量vec执行冒泡排序算法;
输出信息提示"排序后的结果:";
再次调用函数display并传递vec参数以显示排序后的结果;
}
运行结果如下:

第一次的运行结果

该方法并未达到预期效果。

当调用swap函数时,在修改了val1和val2的同时,并未影响vec[i]和vec[j]。

这可能与swap函数所采用的参数传递方式有关。

查阅相关资料后发现,在调用swap函数时虽然会修改其输入参数的内容,
但实际传递的对象间仅存在相同值的关系而非实质联系。

在发现问题后对程序进行了相应优化,
设定了使swap函数直接作用于参数及其实际对象的方式。

修改后的代码如下:
void swap(int &val1, int &val2) {
int temp = val1;
val1 = val2;
val2 = temp;
}

再将vec改为一个reference:

void bubble_sort(vector &vec){/ /}
运行结果如下:

最终结果

全部评论 (0)

还没有任何评论哟~