数据结构算法-排序(一)-冒泡排序

什么是冒泡排序

冒泡排序:在原数组中通过相邻两项元素的比较,交换而完成的排序算法。

算法核心

数组中相邻两项比较、交换。

算法复杂度

  1. 时间复杂度
    实现一次排序找到最大值需要遍历 n-1次(n为数组长度)
    需要这样的排序 n-1次。 需要 (n-1) * (n-1) ---> O(n^2)
    时间复杂度: O(n^2)

算法实现原理

我们以一次排序为例,了解冒泡排序是如何完成排序过程的。

相邻两项比较交换:

  1. 23 和 7 比较, 23和7 交换位置(23>7大泡泡上升)
  2. 23 和 33 比较, 位置不变。
  3. 33 和15 比较, 33 和15交换位置。
  4. 33 和 34 比较, 位置不变。
  5. 34 和 12 比较, 34和12交换位置。
  6. 第一轮排序结束: 34 作为最大的泡泡上升的数组的lenght-1位置。

参考实现

java 复制代码
 for(int i =0; i < a.length; i++){
   for(int j =0; j < a.length - i-1; j++){
      if(a[j] > [j+1] ){
		int tmp = a[j];
		a[j] = a[j+1];
		a[j+1] = tmp;
    }
   }
 }

扩展问题

对于已经有序的数组,例如a\[\] = {1,2,3,4,5,6,7}, 那么冒泡排序还需要进行大量的比较,这样效率并不高。

解决方案 我们可以做一个标记flag = true, 如果进入比较条件则改变flag的值,如果一轮循环之后,发现flag没有变化,那么说明数组是有序的,则不需要继续遍历了。

java 复制代码
 for(int i =0; i < a.length; i++){
   boolean flag = true;
   for(int j =0; j < a.length - i-1; j++){
      if(a[j] > [j+1] ){
      	flag = false;
		int tmp = a[j];
		a[j] = a[j+1];
		a[j+1] = tmp;
    }
   }
   if(flag) break;
 }
相关推荐
装不满的克莱因瓶2 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
文丑颜不良啊2 小时前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊2 小时前
LeetCode2321~2340题目解析
java·leetcode
驭渊的小故事3 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang3 小时前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
白杨尚青3 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
vipxieliang3 小时前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路3 小时前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试