冒泡排序
冒泡排序
哈楼大家好!这是fish的第一篇文章,之后打算先给大家仔细分享一下十大排序的内容,今天我们讲第一个冒泡排序
冒泡排序(Bubble Sort)是一种简单直观的排序算法,它每次比较两个元素的大小,数组跑完一次就相当于排序好一个数。
算法步骤
每一次遍历一遍数组,在遍历的时候比较相邻两个元素的大小,看个人按照升降序把合适的数放到第二个位置上。
针对所有的的元素重复上面的步骤,遍历n(数组的大小)次就相当于整个数组排序完成。
实例演示
总共6个数的排序,按照从小到大:3 38 5 1 9 4
遍历第一次,排序出一个最大的数
- [ ]
经过一次的循环遍历,最大的数38就已经来到了最末端的位置。
遍历第二次,就会排序好第二大的数到倒数第二个位置。
这里我们可以看到由于最后一个数的位置已经确定,我们可以省略一次比较,后续的遍历同理,遍历六次就排序好了6个数。
代码实现
template <class T>
void bubble_sort(std::vector<T> &arrs) {
int n = arrs.size(); // 获取数组的大小
for (int idx_i = 0; idx_i < n; ++idx_i) {
for (int idx_j = 0; idx_j < n - idx_i - 1;
++idx_j) { // 为什么是 < n - idx_i:
// 每遍历一次就排序好一个数,下一次直接跳过后续排好的位置
if (arrs[idx_j] > arrs[idx_j + 1]) { // 根据需要判断,交换两个数
T temp = arrs[idx_j];
arrs[idx_j] = arrs[idx_j + 1];
arrs[idx_j + 1] = temp;
// std::swap(arrs[idx_j], arrs[idx_j + 1]);
}
}
}
}