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

什么是冒泡排序

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

算法核心

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

算法复杂度

  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;
 }
相关推荐
摇滚侠1 分钟前
Java 项目教程《黑马商城》微服务拆分 20 - 22
java·分布式·架构
树下水月1 分钟前
Easyswoole 框架session在高并发/频繁请求下数据丢失问题记录
java·后端·spring
冻感糕人~3 分钟前
大模型面试干货:小白程序员如何准备,轻松拿下高薪Offer?收藏这份独家秘籍!
java·人工智能·学习·ai·面试·职场和发展·大模型学习
多加点辣也没关系4 分钟前
数据结构与算法|第十一章:跳表
数据结构·算法
m2xgo8 分钟前
ThreadPoolexecutor源码分析、C++11线程池实现
开发语言·c++
2501_9127840810 分钟前
反向海淘系统架构设计:1688 自动代采与微服务高并发实战解析
java·微服务·系统架构
风筝在晴天搁浅17 分钟前
字节/蚂蚁/美团/拼多多 LeetCode 165.比较版本号
java·leetcode
晚风叙码18 分钟前
归并排序:从原理到非递归实现,一文搞定
数据结构·算法
@#¥&~是乱码鱼啦19 分钟前
AOP底层:动态代理执行流程(“断点之谜“)
java·开发语言
悲伤小伞19 分钟前
LeetCode 热题 100_3-128. 最长连续序列
c++·算法·leetcode·哈希算法