基本思想:

冒泡排序属于一种典型的交换排序。

  交换排序顾名思义就是通过元素的两两比较,判断是否符合要求,如过不符合就交换位置来达到排序的目的。冒泡排序名字的由来就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换由水底慢慢的浮到水的顶端。

  冒泡排序的思想就是利用的比较交换,利用循环将第 i 小或者大的元素归位,归位操作利用的是对 n 个元素中相邻的两个进行比较,如果顺序正确就不交换,如果顺序错误就进行位置的交换。通过重复的循环访问数组,直到没有可以交换的元素,那么整个排序就已经完成了。

优缺点:

优:空间占用小

缺:两次无脑的循环

适用要求稳定n较小

时间avg 时间min 时间max 空间avg 稳定性

O(n²)

O(n)

O(n²)

空间复杂度O(1) 稳定性:稳定

冒泡排序改进措施

  1. 去掉无脑循环(优化外层循环)设置一个标志位,用来表示当前第 i 趟是否有交换,如果有则要进行 i+1 趟,如果没有,则说明当前数组已经完成排序。
  2. 去除已有序判断(优化内层循环):记录本轮最后一次交换位置,下一轮只需比较到这里就可以。后面已经有序
  3. 双向判断(优化内层循环):每次外循环同时反向进行一次冒泡最小值(若默认是冒泡最大值),优化效率
package main.Test;import java.util.Arrays;public class MaoPaoSort {public static void BubbleSort(int arr[]){int len = arr.length;int i = 0;int j = 0;int lindex = 0;//同时找最大值的最小需要两个下标遍历int flag = 0;int pos = 0;//用来记录最后一次交换的位置int rindex = len - 1;for (i = 0; i < len - 1; i++)//确定排序趟数{pos = 0;flag = 0;//正向寻找最大值for (j = lindex; j < rindex; j++)//确定比较次数{if (arr[j]>arr[j + 1]){//交换int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = 1;//加入标记pos = j;//交换元素,记录最后一次交换的位置}}if (flag == 0)//如果没有交换过元素,则已经有序,直接结束{return;}rindex = pos;//下一次比较到记录位置即可//反向寻找最小值for (j = rindex; j > lindex; j--){if (arr[j] < arr[j-1]) {int tmp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = tmp;flag = 1;}}lindex++;if (flag == 0)//如果没有交换过元素,则已经有序,直接结束{return;}}}public static void main(String[] args) {int[] arr = {1,23,23,4 ,123,412,3,45,3,4512};BubbleSort(arr);System.out.println(Arrays.toString(arr));}
}

冒泡排序时间、空间复杂度相关推荐

  1. 冒泡排序时间 / 空间复杂度

    ** 各种排序算法复习 借鉴转载自十大经典排序算法 ** 十大算法复杂度: 冒泡排序 思想: 两两比较,A[i+1]>A[i] 交换位置. 代码实现: class Solution {publi ...

  2. 001+limou+时间空间复杂度

    0.数据结构的学习推荐书籍 (1)<小黑的漫画算法>简单看一下 (2)<大话数据结构> (3)<数据结构(C语言版)> 1.时间复杂度和空间复杂度 (1)时间复杂度 ...

  3. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  4. 排序算法 之四 分类、时间/空间复杂度、如何选择

    写在前面   现在网上关于排序算法的文档不计其数,为什么要写这篇文章呢?主要是因为一些算法虽然在平时有用到,但是从来没有细细整理过,没有个统一.整体的认识.写这篇文章一来是进行一下总结,二来趁机再系统 ...

  5. Algorithm Master Road:算法的时间/空间复杂度

    很多同学都觉得算法很难,难以入门,难以理解,更难以掌握和运用,其实归根溯源,我们可以把所有的问题都通过枚举法来解决,但是受困于「时间」和「空间」的因素,有的时候并不能枚举所有的情况,所以需要通过精妙的 ...

  6. (二) 时间/空间复杂度计算

    时间/空间复杂度计算 时间复杂度是什么? O(1) O(n) O(1)+O(n)=O(n) O(n)*O(n)=O(n^2) O(logN) 空间复杂度是什么? O(1) O(n) O(n^2) 思考 ...

  7. 数据结构与算法的时间空间复杂度

    提到数据结构与算法就不得不提时间复杂度和空间复杂度,本人看大部分文章介绍都比较晦涩难懂,就想着用简单的代码示例快速让你理解数据结构与算法的时间空间复杂度. 首先,时间复杂度表示的是使用某个数据结构或者 ...

  8. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  9. 二叉树中序遍历习题引发的时间空间复杂度思考:内存角度

    今天做了一道简单的二叉树遍历. 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树--根节点--右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树.因此 ...

  10. 选择排序,插入,快排,冒泡排序的时间空间复杂度详解

    时间复杂度 在算法的分析中,语句的执行次数T(n)是一个关于n(问题规模)的一个函数.分析n的变化引起T(n)的改变,进而得到T(n)的数量级,也就是时间频率.如果存在某一个辅助函数f(n),当n趋于 ...

最新文章

  1. Android应用程序进程启动过程的源代码分析(1)
  2. 技术道路独行16载,他总结了CTO的五大自我修炼法则!
  3. 江边上洗萝卜——一个个来
  4. 谋定重整衍生新360行-李玉庭:协同电商经信研究生态系统
  5. dakai微信小程序 ios_iOSAPP跳转微信小程序
  6. 会议管理的十条黄金原则
  7. windows 常用快捷键与重要文件的路径
  8. SSM之Mybatis框架
  9. Vscode终端汉字乱码的简单解决方法
  10. 抖音api开放平台对接_抖音开放一键发布功能 第三方内容可分享至抖音
  11. JavaScript实现动态显示时间
  12. 1、vinc = vict 胜、征服
  13. 券商Robinhood大量客户被最低价格强平-交易成本拉大500倍,游戏驿站GME只能平仓不能开仓-看看行政总裁Vlad Tenev是如何回复这些问题的?
  14. Java每日一练(1)
  15. 【上古秘籍】之Eclipse的秘籍 转
  16. 青岛新媒体运营教程:教你玩转抖音企业号,6步玩转抖音蓝v号
  17. oracle日期函数,转换函数
  18. mysqlfrm初步使用
  19. linux I2c设备注册
  20. Python3简单爬虫之下载相关类型音乐(喜马拉雅网站)

热门文章

  1. mysql死锁介绍以及解决
  2. 联合书单 | 6本书,李诞带你感受数学之美
  3. CCNA 之 六 路由协议 二 EIGRP
  4. 2022年哪款国产蓝牙耳机比较好?高品质的国产蓝牙耳机推荐
  5. Spring Cloud Gateway网关实现短网址生成、解析、转发
  6. 爬取淘宝商家货物简单销售数据,双十一马上就到了,秒杀准备了吗
  7. 遍历取值异常(Hashtable Enumerator)
  8. python连接redis集群如何释放内存_python 连接 redis cluster 集群
  9. 如何利用sugarnms快速实现网管软件定制开发?
  10. graphSage还是HAN ?吐血力作综述Graph Embeding 经典好文