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

java学习--冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,其核心思想是重复遍历待排序数组,每次比较相邻的两个元素,若顺序错误则交换它们的位置。因较小的元素会像 “气泡” 一样逐渐 “上浮” 到数组顶端,故得名 “冒泡排序”。

一、基本原理

  1. 遍历数组:从数组的第一个元素开始,依次比较相邻的两个元素(如第i个和第i+1个)。
  2. 交换位置:若前一个元素大于后一个元素(升序排序),则交换它们的位置,确保较大的元素 “下沉” 到右侧。
  3. 重复过程:每完成一轮遍历,最大的元素会 “冒泡” 到数组的末尾(本轮的最后一个位置)。
  4. 减少范围:下一轮遍历只需处理剩余未排序的元素(排除已 “冒泡” 到末尾的元素),直到所有元素有序。

二、动图演示(升序排序)

以数组 [3, 1, 4, 2] 为例,冒泡排序过程如下:

第一轮:比较相邻元素,将最大的4移到末尾
[3,1,4,2] → [1,3,4,2](3和1交换)
→ [1,3,4,2] → [1,3,2,4](4和2交换)
结果:[1,3,2,4](4已就位)第二轮:处理前3个元素,将3移到倒数第二位
[1,3,2,4] → [1,3,2,4](1和3不交换)
→ [1,3,2,4] → [1,2,3,4](3和2交换)
结果:[1,2,3,4](3已就位)第三轮:处理前2个元素,已有序,无需交换
最终结果:[1,2,3,4]

三、Java 代码实现(升序排序)

public class BubbleSort {public static void bubbleSort(int[] arr) {if (arr == null || arr.length <= 1) {return; // 数组为空或只有一个元素,无需排序}int n = arr.length;// 外层循环:控制需要排序的轮数(n个元素需要n-1轮)for (int i = 0; i < n - 1; i++) {// 内层循环:每轮比较的范围(排除已排序的i个元素)// 每轮结束后,最大的i个元素已就位,故只需比较到n-1-ifor (int j = 0; j < n - 1 - i; j++) {// 若前一个元素大于后一个,交换位置(升序)if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void main(String[] args) {int[] arr = {3, 1, 4, 2, 5};System.out.println("排序前:" + Arrays.toString(arr));bubbleSort(arr);System.out.println("排序后:" + Arrays.toString(arr));}
}

输出

排序前:[3, 1, 4, 2, 5]
排序后:[1, 2, 3, 4, 5]

四、优化:减少无效遍历

上述基础实现中,若数组在中途已完全有序,仍会执行剩余的轮次,造成无效操作。可通过添加标志位优化:

  • 若某一轮遍历中未发生任何交换,说明数组已完全有序,直接退出循环。
public static void optimizedBubbleSort(int[] arr) {if (arr == null || arr.length <= 1) {return;}int n = arr.length;boolean swapped; // 标志位:本轮是否发生交换for (int i = 0; i < n - 1; i++) {swapped = false; // 初始化:默认未交换for (int j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {// 交换元素int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;swapped = true; // 发生交换,标志位置为true}}// 若本轮未交换,说明数组已有序,直接退出if (!swapped) {break;}}
}

五、特点分析

特性说明
时间复杂度- 最坏情况(完全逆序):O (n²)(需 n-1 轮,每轮 n-i 次比较)- 最好情况(已有序):O (n)(优化后仅需 1 轮遍历)- 平均情况:O (n²)
空间复杂度O (1)(仅使用常数级额外空间,原地排序)
稳定性稳定(相等元素的相对位置不会改变,因仅当arr[j] > arr[j+1]时才交换)
适用场景小规模数据排序(简单易懂,但效率较低,不适合大规模数据)

六、总结

冒泡排序是入门级排序算法,核心逻辑是相邻元素比较交换,通过 “下沉” 大元素实现排序。其优点是简单直观、稳定、原地排序,缺点是时间复杂度较高(O (n²)),仅适合处理少量数据。优化后的版本可通过标志位减少无效遍历,提升最佳情况下的效率。

http://www.dtcms.com/a/561426.html

相关文章:

  • iis7.5 网站配置简述网站建设基本步骤
  • visual studio 获取并输出 $(ProjectDir) 的所在的具体路径
  • wordpress网站搜索引擎微信公众号运营模式
  • 海洋捕食算法的详细原理,公式,应用案例MPA-BP
  • 动态规划的解题套路1-泰波那契模型
  • 高端建站咨询京津冀协同发展英文
  • 【Ubuntu】ubuntu虚拟机磁盘不够扩容后开机黑屏-解决方案
  • 网站建设 教学视频教程网站wap版影响权重么
  • Efficient Memory Management for Large Language Model with PagedAttention
  • 东莞网站建设推广费用wordpress上不去了
  • 网站301重定向$cms和wordpress
  • 网站建设实训进程计划九龙坡区网站建设
  • 【LeetCode 每日一题】1414. 和为 K 的最少斐波那契数字数目
  • 怎么用一个主机做多个网站制作网站报价单
  • 5、webgl基本概念 + 绘制多边形 + 绘制圆 + 绘制圆环
  • 触摸屏网站如何做电子商务网站建设清华大学
  • 北京做网站的大公司惠阳网站建设
  • 网站开发做什么简单wordpress 自动发卡
  • 毕业设计做网站教程深圳app定制开发多少钱
  • 4.2【2020统考真题】
  • 4.2【2022统考真题】
  • 13.C++:继承
  • 做我的世界壁纸网站VPS wordpress 教程
  • 扒下来的网站怎么做修改php做网站访问记录
  • jxWebUI--日期时间选择框
  • Linux防火墙配置:iptables与firewalld使用指南(附案例)
  • 毕业设计网站开发类题目济南营销型网站建设贵吗
  • 网站服务器维护价格wordpress主页链接失效
  • 销售网站建设考核指标旅游网站开发目的6
  • 路由器端口镜像的配置与实验(eNSP)