算法说明:

冒泡排序实际上是使用的最多的排序,逻辑是循环然后对相邻的数字进行比较,并交换数据。

例如有一个数组int[] arrayData = { 2, 3, 1, 5, 6, 7, 4, 65, 42 },一共9个元素。

假设我们要做降序排序,那么首先全部9个元素从第1个元素开始进行两两比较,把小的元素放到后边;元素1小于元素2,那么元素1与元素2进行交换,然后元素2与元素3进行比较,元素2大于元素3,那么不进行交换,再进行元素3与元素4的比较…………以此类推最后比较到元素9。 这时元素9已经存在的是最小的数字啦。 接着我们继续比较前8个元素,再把最小的数字移动到元素8中。 然后前7个元素两两比较,前6个,前5个……以此类推,最后得出结果。

算法复杂度:

O(n2)

空间复杂度:

O(1)

代码:

使用语言:Java

/** 冒泡排序*/
public class BubbleSort {public static void main(String[] args) {int[] arrayData = { 2, 3, 1, 5, 6, 7, 4, 65, 42 };BubbleSortMethod(arrayData);for (int integer : arrayData) {System.out.print(integer);System.out.print(" ");}}public static void BubbleSortMethod(int[] arrayData){int temp = 0;for (int i = 0; i < arrayData.length; i++) {for (int j = 1; j < arrayData.length - i; j++) {if (arrayData[j] > arrayData[j - 1]) {temp = arrayData[j];arrayData[j] = arrayData[j - 1];arrayData[j - 1] = temp;}}}       }
}

结果是:

65 42 7 6 5 4 3 2 1 

论证算法复杂度:因为是双层循环,所以最坏算法复杂度是O(n2)。

论证空间复杂度:因为作为临时空间进行数据交换只有一个temp变量,所以空间复杂度是O(1)

Hark的数据结构与算法练习之冒泡排序相关推荐

  1. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  2. 数据结构与算法之二冒泡排序

    冒泡排序(以从小到大排序为例)的思路是:将相邻的两个数比较,将小的调到前头,假设有6个数(8,9,5,4,2,0),第1次比较第1和第2个数(8和9)的大小,如果第1个数大于第2个数,就把两个数位置交 ...

  3. Hark的数据结构与算法练习之珠排序

    ---恢复内容开始--- 算法说明 珠排序是分布排序的一种. 说实在的,这个排序看起来特别的巧妙,同时也特别好理解,不过不太容易写成代码,哈哈. 这里其实分析的特别好了,我就不画蛇添足啦.  大家看一 ...

  4. Hark的数据结构与算法练习之锦标赛排序

    算法说明 锦标赛排序是选择排序的一种. 实际上堆排序是锦标赛排序的优化版本,它们时间复杂度都是O(nlog2n),不同之处是堆排序的空间复杂度(O(1))远远低于锦标赛的空间复杂度(O(2n-1)) ...

  5. Hark的数据结构与算法练习之圈排序

    算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较 ...

  6. Hark的数据结构与算法练习之若领图排序ProxymapSort

    算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整-- 话说,这个 ...

  7. 数据结构排序算法——交换排序(冒泡排序Bubble Sort)

    一.算法简介: 每一趟只能确定将一个数归位.即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去.如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n- ...

  8. 数据结构与算法(十六)冒泡排序和鸡尾酒排序

    冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,以将当前序列的最小值交换到当前序列最前端为一轮结束,需要(length-1)轮,感觉数据是一 ...

  9. Hark的数据结构与算法练习之基数排序

    算法说明 基数排序是基于计数排序的,所以看这个之前要先看一下计数排序对于理解基数排序是很有帮助的(发现计数和基数的音节几乎一致啊).这个我有写,请点击. OK,现在你肯定已经熟悉了计数排序,那么我就来 ...

最新文章

  1. github创建静态页面_如何在10分钟内使用GitHub Pages创建免费的静态站点
  2. Jboss解决只能通过localhost访问而不能使用IP访问项目的问题
  3. Mysql Router 读写分离配置
  4. C/C++写无控制台窗口程序
  5. C语言stdio.h与stdlib.h的区别
  6. 最新综述:从多个角度介绍多模态对话信息搜索(MMCIS)任务
  7. Java JNI浅析(一)
  8. 信息奥赛一本通(1099:第n小的质数)
  9. Java long传到前台精度损失解决方案
  10. 手机应用只清理不够,还要卸载
  11. Win7 下替代NetMeeting的屏幕共享工具 InletexEMC
  12. python编程a的x次方_python平方-Python,平方
  13. 51单片机通过DHT11温度传感器读取温度(2)
  14. refactoring的思考
  15. oracle11g 迁移至达梦8数据库环境
  16. 网页端实现大尺寸图片的查看、放大缩小、标记标尺等功能
  17. h5移动端安卓键盘顶起页面回落问题
  18. 性格色彩测试android程序开发之三--dialog(续)
  19. Eclipse+Java+Swing+Mysql实现医院挂号系统
  20. 硬盘分区文件格式变成RAW,点击就显示未格式化解决方法(小莫)

热门文章

  1. FTP(文件传输协议)
  2. PIPIOJ1451: PIPI的数学题VIII
  3. App云测试平台有哪些?
  4. 雨林木风发布 Windows一键还原 2011 v1.5.5.6
  5. Python实验,用pygame做飞机大战游戏设计
  6. html中写页边距,html整体页面边距怎么设置
  7. iview可编辑表格组件封装
  8. Java利用接口计算立体图形的表面积和体积
  9. Android平台所支持的API级别
  10. Mysql基础篇(10)—— MySQL8.0新特性概览