冒泡排序,实际上是将一个数组中从下标为i=0的元素开始,与他的下一个元素比较,如果是升序排列就把大的往后放。
这里数组就直接用stl的vector实现了,主要是练习冒泡排序:
采用双层嵌套的遍历方式,让每一个元素一层一层的和后面的元素进行比较,如果比他大就往上浮,过程就像泡泡慢慢浮出水面,故名冒泡排序,第一层是遍历i个元素,但他必须减去一个1,因为他始终要与他的下一个比较,最后一个元素是不用比较的,如果不减一会导致数组越界。
当一个元素遍历了一遍以后,就会回过头来遍历下一个元素依次和后面的元素比对,不用和他前面的比对,所以是-i-1。
有些人可能会看到我这个函数接受的是值传递,不是引用传递,这里我说一下,我是故意的,我只想这个函数排序输出他排序后的副本,不打算更改原来的数组。
下面是完整的程序:
template<typename T>
void bubblesort(vector<T> vec) {T temp;for (auto i = 0; i < vec.size()-1;++i) {for (auto j = 0; j < vec.size()-i-1; j++){if (vec[j]>vec[j+1]) {temp = vec[j+1];vec[j + 1] = vec[j];vec[j] = temp;}}}cout << "排序结果:";for (size_t k = 0; k < vec.size(); ++k) {cout << vec[k];if (k != vec.size() - 1) cout << ",";}cout << endl;
}