当前位置: 首页 > news >正文

冒泡排序(Bubble Sort)

一、排序动画:

https://visualgo.net/zh/sorting



二、冒泡排序概念:

冒泡排序(Bubble Sort):是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。


 三、冒泡排序动画图:

冒泡排序.gif

 四、实现思路:

举例:int[] arr = {5, 2, 4, 1, 3};
第一层循环:
是确定遍历的轮数,每一趟排序都能确定一个最大的元素。共执行 arr -1 趟排序。
第二层循环:
相邻元素依次两两比较(大的往后移,小的往前移。即交换位置)
如:5 和 2 比较,交换位置(2,5,4,1,3),
5 和 4 比较,交换位置(2,4,5,1,3),
5 和 1 比较,交换位置(2,4,1,5,3),
5 和 3 比较,交换位置(2,4,1,3,5)
到这里就完成了第一趟排序,第二趟排序同理。

可能很多人不理解为什么第二层循环要进行 arr - i -1 , 简单说就是每一轮排序完都能确定一个最大的元素。 如第一轮确定最大元素 5 , 第二轮确定最大元素 4(”[2, 1, 3, 4, 5]“), 第三轮....,所以就相当于数组后面的元素已经排好序了不需要再进行比较交换(即该层循环是控制每轮的比较次数)。

Java实现步骤:


五、实现代码:

BubbelSort.java


/**
 * @Author hzs - 冒泡排序
 * @date 2023/5/31 11:03
 * @Version 1.0
 */
public class BubbelSort {
    public static void main(String[] args) {
        int[] arr = {5, 2, 4, 1, 3};
        System.out.println("排序前:" + Arrays.toString(arr));
        bubbelSort(arr);
        System.out.println("排序后: " + Arrays.toString(arr));
    }

    public static void bubbelSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {  // 进行 arr.length - 1 趟已经完成排序,所以最后一轮不需要遍历。
            for (int j = 0; j < arr.length -1 - i; j++) { // -1-i 是因为后面的元素已经排好序了,所以不需要再次遍历。
                if (arr[j] > arr[j + 1]) { // 相邻元素依次比较(小的往前移,大的往后移。即交换位置)
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
            System.out.println("第 " + (i + 1) + " 轮排序:" + Arrays.toString(arr));
        }
    }
}

输出如下:
排序前:[5, 2, 4, 1, 3]
第 1 轮排序:[2, 4, 1, 3, 5]
第 2 轮排序:[2, 1, 3, 4, 5]
第 3 轮排序:[1, 2, 3, 4, 5]
第 4 轮排序:[1, 2, 3, 4, 5]
排序后: [1, 2, 3, 4, 5]


由上可知实际上只要进行 3 轮排序就能完成冒泡排序算法(甚至更少轮),已经排好序的也不需要再次排序,因此以上实现方式、包括性能方面等还可以再进一步优化。


技术水平有限,如有错误,欢迎指正!

相关文章:

  • 第13周:LSTM实现糖尿病探索与预测
  • UE 播放图像序列
  • 学习记录:初次学习使用transformers进行大模型微调
  • Docker镜像面试题及参考答案
  • 计算机毕业设计 ——jspssm513Springboot 的小区物业管理系统
  • HTML+CSS
  • 什么是数据治理?如何从数据治理中获得价值?
  • 【新人系列】Python 入门专栏合集
  • 【网络】TCP vs UDP详解( 含python代码实现)
  • AI如何通过大数据分析提升制造效率和决策智能化
  • hot100-栈 二分
  • 【我的 PWN 学习手札】IO_FILE 之 利用IO_validate_vtable劫持程序流
  • 【构建工具】Gradle 8中Android BuildConfig的变化与开启方法
  • WSL2下,向github进行push时出现timeout的问题
  • Web漏洞——命令注入漏洞学习
  • 【弹性计算】Guest OS
  • 内存资源分配
  • 视频推拉流EasyDSS直播点播平台授权激活码无效,报错400的原因是什么?
  • java后端开发day21--面向对象进阶(二)--继承进阶
  • Week 2 - Algorithm efficiency + Searching/Sorting
  • 福州交警:一小型汽车因操作不当撞上汽车和电动车,致2人死亡
  • 国务院食安办:加强五一假期食品生产、销售、餐饮服务环节监管
  • 以“最美通缉犯”为噱头直播?光明网:违法犯罪不应成网红跳板
  • 日本希望再次租借大熊猫,外交部:双方就相关合作保持密切沟通
  • 国务院任免国家工作人员:饶权任国家文物局局长
  • 五一假期“热潮”来袭,计划南下的小伙伴注意了