冒泡排序

  • 简介
  • 代码示例
  • 排序过程
  • 时间复杂度
    • 最差时间复杂度&平均时间复杂度
    • 最优时间复杂度
      • 说明
      • 代码示例
      • 动画示例
  • 空间复杂度
  • 稳定性

简介

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。以升序为例。顺序轮序数组内元素。依次比较两个相邻的元素,如果顺序错误就交换位置。比较过程最大值就像泡泡一样从左往右慢慢浮到最右侧。每轮遍历后右侧元素为最大值。
共进行n轮轮序,最终排序完成。

文章中使用的动画网站地址,限 pc: 排序算法动画http://www.donghuasuanfa.com/sort

算法一览表:https://blog.csdn.net/ww753951/article/details/106862328

代码示例

 public static void bubbleSort(int arr[]) {for(int i =0 ; i<arr.length-1 ; i++) { for(int j=0 ; j<arr.length-1-i ; j++) {  if(arr[j]>arr[j+1]) {int temp = arr[j];                     arr[j]=arr[j+1];      arr[j+1]=temp;}}    }}

排序过程

下图所示为升序排序。首先比较13和43,因为13小于43,所以无需更换位置。然后比较43和31,因为43大于31,所以更换位置,更换后满足数组升序。最后再比较43和20,因为43大于20,所以更换位置。此过程为一轮比较,比较后保证最右侧为最大值。
        共需要重复上述n次比较,才能保证数组整体为升序。

时间复杂度

最差时间复杂度 平均时间复杂度 最优时间复杂度
O(N2)O(N^2) O(N2) O(N2)O(N^2) O(N2) O(N)O(N) O(N)

最差时间复杂度&平均时间复杂度

每轮比较的过程是比较相邻的两个元素。此过程的时间复杂度为N。每轮比较后找出最大的一个元素。然后共比较N轮。所以时间复杂度为:O(N2)O(N^2) O(N2)

最优时间复杂度

说明

最优时间复杂度为 O(N) 。算法需要优化。 设置一个全局变量是否交换过位置。在第一次循环后判断如果没有进行过交换处理,则跳出循环。

代码示例

 public static void bubbleSort(int arr[]) {boolean change = false;for(int i =0 ; i<arr.length-1 ; i++) { for(int j=0 ; j<arr.length-1-i ; j++) {  if(arr[j]>arr[j+1]) {int temp = arr[j];                     arr[j]=arr[j+1];      arr[j+1]=temp;change = true;}}    if(! change){break;}}}

其中 change 变量为变化变量。如果 交换过位置则设置为true。循环结束后判断change变量是否为 false。如果为false,则未交换过位置,说明数组为已排序数组。可结束方法。

动画示例

空间复杂度

空间复杂度: O(1) 。
冒泡排序为交换排序,当两个元素大小不相同时,俩个元素交换位置,无需额外空间,所以空间复杂度为 O(1)。

稳定性

两个元素的值相同时如果最终排序完成后位置不变,则为稳定排序,如果位置变更则为不稳定排序。
排序算法中,如果数字相同,则无需变更位置,避免额外的操作。
冒泡排序当两个元素相等时,无需变更位置,也能达到排序效果,所以为稳定排序。

算法——排序——冒泡排序图解动画相关推荐

  1. 重温经典排序算法之冒泡排序——图解+C/C++实现

    目录 1.冒泡排序算法原理: 2.算法性能分析: (1)时间复杂度 (2)算法稳定性 3.图解分析 4.C/C++实现 1.冒泡排序算法原理: [说明]这里实现的冒泡排序算法均为从小到大排序 1.比较 ...

  2. 算法-排序-冒泡排序

    冒泡排序 特点:原址排序,比较排序 时间复杂度O(n^2) void bubble_sort(int *arr,int start,int end) {for (int i = start; i &l ...

  3. shell编程数组与冒泡算法排序详解

    shell编程数组与冒泡算法排序详解 一 数组的四种表达方式 二 数组的增删改查操作 三 数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 冒泡算法排序 一 数组的四种表达 ...

  4. 秒懂的shell编程数组与冒泡算法排序详解

    shell编程数组与冒泡算法排序详解 一.数组的四种表达方式 二 .数组的增删改查操作 三 .数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 .冒泡算法排序 一.数组的四 ...

  5. 冒泡排序java代码_看动画学算法之:排序冒泡排序

    点击上方的蓝字关注我吧 程序那些事 简介 排序可能是所有的算法中最最基础和最最常用的了.排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序. 排序算法有很多种,每个都有 ...

  6. 看动画学算法之:排序-冒泡排序

    文章目录 简介 冒泡排序的原理 冒泡排序算法的java实现 冒泡算法的第一次改进 冒泡算法的第二次改进 冒泡排序的时间复杂度 简介 排序可能是所有的算法中最最基础和最最常用的了.排序是一个非常经典的问 ...

  7. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  8. C#算法设计排序篇之04-选择排序(附带动画演示程序)

    选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ...

  9. 排序算法-冒泡算法【GIF图解】初学者小白必看

    Chinar blog :www.chinar.xin Unity UGUI 完整系列教程 (Chinar中文图解) C#排序算法之冒泡排序 本文提供全流程,中文翻译 助力快速掌握 冒泡排序 原理及应 ...

  10. 动态可视化十大排序算法之冒泡排序

    点击上方蓝字关注我们 提到排序算法呀,我想你肯定不陌生.这应该是学习编程时学到的第一个算法了吧. 我现在还能记得自己当时在 VC++ 6.0 上按照谭浩强老师的 C 语言教材敲出第一个冒泡排序时的激动 ...

最新文章

  1. MVC 事物同时保存,更新数据库
  2. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xx' is defined
  3. 不学无数——SpringBoot入门Ⅷ
  4. 糖豆人服务器要维护多久,糖豆人刚上四天,紧急维护9小时后又延长,玩家:从中午到现在了...
  5. PHP 在线 编辑 解析
  6. windows下ping命令的结果前加上系统的当前时间
  7. 杭电OJ1002大数据相加
  8. samba (centos6.5)服务
  9. Java 异常 (Exception) 剖析 与 用户自定义异常
  10. golang ide 环境搭建_golang环境搭建
  11. Redis总结笔记(总结自Redis开发与运维)
  12. 内存条频率4000MHZ,开启XMP技术内存读写速度前后对比图
  13. 一个简单的多线程实现
  14. Six Sigma Basics
  15. IE浏览器收藏夹里面的内容不显示
  16. Nachos环境搭建
  17. (CVPR-2020)动态卷积:注意力卷积核
  18. 嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:曾文旌
  19. 互联网快讯:极米NEW Z6X全新升级版Z6X Pro上线;海信提速海外业务;红杉资本掌门人退休
  20. css禁止图片保存,CSS的图片保存后面目全非?教你快速解决

热门文章

  1. 常用的分类与预测算法
  2. linux关掉终端快捷键,linux终端快捷键汇总
  3. php中文九九乘法表,PHP输出九九乘法表代码实例
  4. 小米电视共享计算机权限,小米电视局域网共享文件 小米盒子局域网共享视频通用方法...
  5. 传递函数转化为状态空间 matlab,多变量系统传递函数模型转换为状态空间模型的MATLAB实现方法...
  6. 模糊集合及运算1.4
  7. 数字孪生可视化开发技术(ThingJS)学习笔记
  8. 安装多个win10系统
  9. 小程序车型品牌车系三级选择(地区也一样)
  10. bim 水利枢纽 运维_BIM——运维专篇