冒泡排序

冒泡排序

哈楼大家好!这是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]);
      }
    }
  }
}

posted @ 2023-03-27 16:28  xigaun  阅读(28)  评论(0编辑  收藏  举报