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

Java算法之冒泡排序(Bubble Sort)

冒泡排序简介

冒泡排序是一种基础的排序算法,以其简单性和直观性而著称。它通过重复遍历待排序的数列,比较每对相邻元素,并在必要时交换它们的位置,从而实现排序。

算法原理

冒泡排序的基本思想是:通过重复遍历整个数组,每次遍历都会将最大的元素“冒泡”到它应该在的位置。这个过程会一直重复,直到整个数组变得有序。

代码实现

以下是使用Java实现冒泡排序的示例代码:

public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        boolean swapped; // 用于标记是否发生了交换

        // 外层循环控制遍历次数,n-1次遍历足以完成排序
        for (int i = 0; i < n - 1; i++) {
            swapped = false; // 每次遍历开始前,重置交换标记

            // 内层循环进行实际的元素比较和交换
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 发生交换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swapped = true; // 标记发生了交换
                }
            }

            // 如果在这一轮遍历中没有发生任何交换,说明数组已经有序,可以提前结束
            if (!swapped) {
                break;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr);
        System.out.println("排序后的数组: ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

优缺点分析

优点

  • 稳定性:冒泡排序是稳定的排序算法,相等的元素在排序后保持原有的顺序。
  • 简单性:算法原理简单,易于理解和实现。
  • 原地排序:不需要额外的存储空间。

缺点

  • 时间复杂度:平均和最坏情况下的时间复杂度都是O(n^2),对于大规模数据集效率较低。
  • 空间复杂度:尽管是原地排序,但空间复杂度为O(1)。
  • 性能:在大多数情况下,冒泡排序的性能不如其他更高级的排序算法,如快速排序、归并排序等。

使用场景

  • 教学目的:由于其简单性,冒泡排序常用于教学中,帮助初学者理解排序算法的基本概念。
  • 小规模数据:当处理的数据量较小,且对性能要求不高时,冒泡排序是一个可接受的选择。
  • 部分有序数据:如果已知数据已经部分有序,冒泡排序的性能可能会相对较好。

结语

冒泡排序虽然在实际应用中的效率不高,但它的原理简单,适合作为学习排序算法的入门点。在实际开发中,我们通常会根据数据的特点和性能要求选择更合适的排序算法。通过理解冒泡排序,我们可以更好地把握排序算法的基本概念和设计原则。


http://www.kler.cn/a/291696.html

相关文章:

  • 面试题:Kafka(一)
  • 15分钟学 Go 第 59 天 :更高级的Go话题——接触微服务
  • 深度学习神经网络创新点方向
  • 调用门提权
  • 【MySQL】InnoDB内存结构
  • 【Electron】Electron Forge如何支持Element plus?
  • [NOI1998] 免费的馅饼(三维偏序转二维偏序)
  • 【python爬虫】超越Selenium的自动化爬虫神器--DrissionPage语法解析与应用实战
  • C++:控制电脑状态控制
  • WPF 手撸插件 七 日志记录(二)
  • Unity(2022.3.41LTS) - UI详细介绍-Scrollbar(滚动条)
  • 【华为】测试工程师面试题汇总,你可知道华为的高薪技术岗有多香~
  • 中国航天科工笔试25考什么?如何通过人才测评|附真题库面试攻略
  • 布隆过滤器和布谷鸟过滤器
  • 设计模式 | 单例模式
  • 修改jupyter notebook 默认浏览器(不动配置文件,改系统默认浏览器)
  • Python基础语法(17多线程线程锁单例模式)
  • JS中【普通函数中的this】vs【箭头函数中的this】
  • 【Python控制台小游戏】剑与魔法
  • P3631 [APIO2011] 方格染色
  • 深度学习速通系列:Bert模型vs大型语言模型(LLM)
  • 【前端面试】采用react前后,浏览器-解析渲染UI的变化
  • 解决jupyter notebook启动需要密码的问题
  • Zabbix_Proxy自动化安装脚本
  • 五分钟搭建微信机器人保姆级教程
  • SSG页面加上了 revalidate,是不是就变成了 ISG?