冒泡排序

原理

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过依次比较两个相邻的的元素,看两个元素是否满足大小关系要求,如果不满足则交换两个元素。每一次冒泡会让至少一个元素移动到它应该在的位置上,这样 n 次冒泡就完成了 n 个数据的排序工作。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

算法过程描述

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上两个步骤,除了最后一个;
  • 重复前三步,直到排序完成。

算法执行过程如下图

代码实现

public class BubbleSort {public static void main(String[] args) {int arr[] = {3, 9, -1, 10, 11};BubbleSort(arr);}public static int[] BubbleSort(int arr[]) {int temp = 0;//标志是否一次排序经过元素之间的交换boolean flag = 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]) {flag = true;temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}System.out.println(Arrays.toString(arr));if (!flag) {break;} else {flag = false;}}return arr;}
}

1:冒泡排序的时间复杂度是多少?

最好情况下,要排序的数据已经是有序的了,我们只需要进行一次冒泡操作,就可以结束了,所以最好情况时间复杂度是 O(n)。而最坏的情况是,要排序的数据刚好是倒序排列的,我们需要进行 n次冒泡操作,所以最坏情况时间复杂度为 O(n2)。

2:冒泡排序的空间复杂度是多少?

冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以它的空间复杂度为 O(1),是一种 in-place 排序算法。

3:冒泡排序是稳定的排序算法吗?

在冒泡排序中,只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。

排序算法---冒泡排序(java版)相关推荐

  1. 经典排序算法(Java版)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 经典排序 ...

  2. 八大经典排序算法(java版)

    这里写目录标题 交换算法之冒泡排序 交换算法之快速排序 插入算法之插入排序 插入排序之希尔排序 选择排序之简单选择排序 排序算法之归并排序 排序算法之基数排序 常用排序算法之堆排序 交换算法之冒泡排序 ...

  3. 十大排序算法入门(JAVA版)

    文章目录 前言 ❤️冒泡排序

  4. 经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

    经典十大排序算法[Java版完整代码] 写在前面的话 十大排序算法对比 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 插入排序 希尔排序 计数排序 桶排序 基数排序 完整测试类 写在前面的话   ...

  5. Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...

  6. 内部排序比较(Java版)

    内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法 1.1 插入排序 1.2 交换排序(冒泡) 1.3 选择排序(简单) 2 比较 3 补充 3.1 快速排序 3.2 什么是 ...

  7. 八大排序算法的java实现

    八大排序算法的java实现 有时间再贴算法分析图 JDK7的Collections.sort()的算法是TimSort, 适应性的归并排序, 比较晦涩难懂, 这里没有实现 public class m ...

  8. java 3 9 2 6数字排序_GitHub - JourWon/sort-algorithm: 史上最全经典排序算法总结(Java实现)...

    史上最全经典排序算法总结(Java实现) 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗, ...

  9. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang;import java.util.Arrays;/*** Created by admin on 2017/1/20.*/ p ...

  10. 十大排序算法(Java)

    文章目录 十大排序算法(Java) 一.冒泡排序(Bubble Sort) 二.选择排序(Selection Sort) 三.堆排序(Heap Sort) 四.插入排序(Insertion Sort) ...

最新文章

  1. python字典导入mongodb_Python中的有序字典:添加到MongoDB
  2. matlab中的square函数
  3. boost::test::basic_cstring相关的测试程序
  4. Python基础-小程序练习(跳出多层循环,购物车,多级菜单,用户登录)
  5. 从0到1 | 0基础/转行如何用3个月搞定机器学习
  6. Python 编程问题集
  7. python脚本 游戏赚金币_python捡金币游戏(上)
  8. oracle宕机原因排查,oracle不定期的出现宕机的问题诊断
  9. Android自定义view之measure、layout、draw三大流程
  10. linux - 查看是否安装 apache 以及 apache 版本
  11. 反射生成SQL语句入门
  12. 关于autoconf
  13. tp3.2 视图中U函数传变量值
  14. css拖动音乐进度条,利用CSSclip实现音频播放圆环进度条教程实例
  15. 福州船政计算机专业多少钱,福建船政交通职业学院怎么样排名多少?特色专业?录取分数线及收费...
  16. 在Python中建立N维数组并赋初值
  17. STM32单片机的学习
  18. 一对一直播app大热,使用源码或自主开发一对一APP需要了解哪些技术?...
  19. 如何调用EasyCVR平台的登录、播放地址、录像回看接口?
  20. 搜网页显示未连接上服务器是什么,【科普君】网页搜索时,出现“404”到底是什么意思?...

热门文章

  1. php 中find,Linux中find命令的用法汇总
  2. php持续写入文件,PHP:如何读取不断写入的文件
  3. excel表格行列显示十字定位_Excel行列十字交叉高亮显示
  4. 新人python2和python3的区别_未明学院:Python2与Python3的主要区别
  5. deepnode处理过的图片_这款实用的图片软件,其功能相当于十几款图片处理软件的功能之和...
  6. linux mysql 开启远程访问
  7. 到成都去是联想的必然选择
  8. Error creating bean with name 'messageSource' defi
  9. 新浪微博IPO,曹国伟策略之功
  10. ExpandableListView(一)替换系统默认的箭头