前面两篇博客讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序、快速排序(冒泡排序的改进)。

交换类的算法:通过交换逆序元素进行排序的方法。

冒泡排序:反复扫描待排序记录序列,在扫描的过程中,顺次比较相邻的两个元素的大小,若逆序就交换位置。

算法实现代码如下:

package exp_sort;public class BubbleSort {public static void bubble(int array[]) {boolean change = true;for (int i = 0; i < array.length && change; i++) {change = false;for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;change = true;}}}for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println("\n");}public static void main(String[] args) {// TODO Auto-generated method stubint array[] = { 38, 62, 35, 77, 55, 14, 35, 98 };bubble(array);}}

算法分析:最好的情况是,需要排序的初始状态是正序排列的,则一趟扫描即可完成,此时时间复杂度是O(n);最坏情况是,需要排序的初始状态是反序的,则需要n-1趟扫描,此时时间复杂度是 O(n^2),空间复杂度是 O(1);该算法是一种 稳定的排序方法。

数据结构排序系列详解之三 冒泡排序相关推荐

  1. 数据结构排序系列详解之七 归并排序

    在前面说的那几种排序都是将一组记录按关键字大小排成一个有序的序列,而归并排序的思想是:基于合并,将两个或两个以上有序表合并成一个新的有序表 归并排序算法:假设初始序列含有n个记录,首先将这n个记录看成 ...

  2. 数据结构排序系列详解之四 快速排序

    交换类排序的另一个方法,即快速排序. 快速排序:改变了冒泡排序中一次交换仅能消除一个逆序的局限性,是冒泡排序的一种改进:实现了一次交换可消除多个逆序.通过一趟排序将要排序的数据分割成独立的两部分,其中 ...

  3. 数据结构排序系列详解之一 插入排序

    复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. 排序 1.概念: 有n个记录的序列{R1,R2,.......,Rn}(此处注意 ...

  4. 数据结构排序系列详解之六 树形选择排序

    这篇博客接着来说说选择类排序之一的排序:树形选择排序 在简单选择排序中,每次的比较都没有用到上次比较的结果,所以比较操作的时间复杂度是O(N^2),想要降低比较的次数,则需要把比较过程中的大小关系保存 ...

  5. 数据结构排序系列详解之五 简单选择排序

    在前面的博客中已经讲述了交换类的排序算法,这节中开始说说选择类的排序算法了,首先来看一下选择排序的算法思想: 选择排序的基本算法思想: 每一趟在 n-i+1 (i=1,2,3,--,n-1)个记录中选 ...

  6. 数据结构排序系列详解之二 希尔排序

    接着上一篇博客,这篇要介绍的是希尔排序(缩小增量排序法). 希尔排序:通过比较相距一定间隔的元素来工作:各趟比较所用的距离(增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.是插入排序 ...

  7. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  8. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  9. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

最新文章

  1. MySQL主从失败 错误Got fatal error 1236解决方法
  2. 如何删除开发用户的开发Key
  3. AXURE RP8实战手册(完整版)
  4. java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用
  5. One order error message log and storage
  6. Event flow
  7. graphql tools_声明式GraphQL:编写更少的代码,并使用graphql-tools完成更多工作
  8. Spring的@Transactional注解踩坑
  9. CSDN创作的markdown语法
  10. Atitit 互联网 技术公司的组织架构 事业部 分公司
  11. ubuntu 安装永中office 2009
  12. python常用英语单词(小白)
  13. 亚马逊要验证收款查关联?
  14. 数据分析中的缺失值处理
  15. python科学计算的例子_Python科学计算:NumPy
  16. 科尼数字科技张彬:云设计系统助力行业数字化转型
  17. 但总觉得明白了一点点什么
  18. 蓝牙BLE芯片PHY6222之I2C主从通信
  19. Typora数学公式符号
  20. 使用ESP8266与小爱同学通过Arduino控制舵机

热门文章

  1. 第一章 什么是数组名?
  2. 计算机专业马来西亚,去马来西亚读计算机专业如何
  3. 干货||Selenium自动化测试网页
  4. java持久层用文件_JAVA中用三种方法将字符串持久化到文件中
  5. mooc上c语言怎么改作业,C语言的编写、运行和修复代码
  6. ofstream清空文件内容_回收站被删除的文件怎么恢复 回收站清空了怎么恢复
  7. vscode如何关闭Pylint警告或错误提示
  8. 视频编解码质量评价---BDBR与BD-PSNR
  9. git21天打卡day4-查看仓库地址
  10. java switch原则_Java switch case语句