排序算法专题-冒泡排序
顾名思义,冒泡排序的原理就是最小(最大)的元素会在一次次迭代中逐渐浮现到数组的顶端,每一次的迭代都是相邻两个元素之间的比较.
- 具体的算法步骤是:
1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2:对每一对相邻元素作同样的比较和操作,一直到数组最后一个元素。第一轮迭代完成后,最后的元素会是最大的数。
3:针对所有的元素重复以上的步骤,每一轮迭代需要的比较次数为n-k,k为已经迭代的次数,因为每迭代以此,就有一个元素确定了位置。举个栗子:
原数组:3 38 5 44 15 36,数组元素为6个
第一轮迭代:
38和5、44和15、44和36交换位置:3 5 38 36 15 44
第二轮迭代:最后一个位置不需要进行比较了。因此比较次数=n-k=6-1=5
38和36、38和15交换位置:3 5 36 15 38 44
以此类推- python代码实现如下:
def bubbelSort(nums):n = len(nums)for i in range(n-1):for j in range(n-1-i):if nums[j] > nums[j+1]:nums[j], nums[j+1] = nums[j+1], nums[j]
nums = [3, 38, 5, 44, 15, 36]
bubbelSort(nums)
print(nums)
- 算法解析:冒泡排序算法每一次迭代确定一个较大(较小)的元素所在的位置,所以一共需要进行n-1次迭代,因为确定了n-1个位置之后,剩下的一个元素位置必然就确定了,因此代码中第一层循环次数为n-1次,当前已完成迭代次数为k,每一次迭代所需要比较的次数为没有确定位置的元素,即n-k-1,因此第二层循环对应的循环次数为n-i,该算法在原来数组上进行操作,没有产生额外的空间消耗,因此空间复杂度为O(1),该算法的运行次数为(1+2+3+…+n-1)=(n-1)*n/2,时间复杂度为O(n2)。
- 该算法的迭代次数是固定的,不论数组是否有序,迭代次数不变,比较次数不变,该算法不会改变相等元素的相对次序,以此冒泡排序算法是稳定算法。
排序算法专题-冒泡排序相关推荐
- Java排序算法:冒泡排序
Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...
- 排序算法:冒泡排序、插入排序、选择排序、希尔排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...
- golang 排序_常用排序算法之冒泡排序
周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- 数据结构与算法:十大排序算法之冒泡排序
数据结构与算法:十大排序算法之冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换 ...
- 【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
[排序算法]冒泡排序.简单选择排序.直接插入排序比较和分析 写在前面: 本文简单介绍了冒泡排序.简单选择排序.直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时.进一步,我 ...
- 排序算法(1)冒泡排序
排序算法(1)冒泡排序 原理: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3. ...
- php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法.分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换 ...
- 冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序
周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...
- 排序算法之冒泡排序(Java版)
排序:即使集合或数组中的元素有序化 本篇介绍最简单.最易掌握的冒泡排序 冒泡排序: 是一种简单的排序算法, 冒泡排序就像学生站队一样,要在老师的引导下,以某位同学位基准,其他学生按身高 ...
最新文章
- 简明Python3教程 4.安装
- 测试无线节能信标与主控器之间的控制功能
- 计算机软件硬件试讲,试讲:初识计算机网络
- 对用户密码进行md5加密的代码实现
- (太棒了)程序员的十个层次 你属于哪一层?
- 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
- 【转】四阶魔方还原1
- 无需私钥的pssh的安装使用
- 排序系列 之 堆排序算法 —— Java实现
- matlab 直方图修正,matlab直方图修正
- 计算机管理即插即用服务,意外终止Plug and Play(即插即用)服务开启方法
- 使用Spire组件抛出异常The type initializer for 'spr857' threw an exception
- 智能家居(3)智能交互的竞品分析
- Android计步模块(类似微信运动 今日步数)
- html首字母样式,CSS实现段落首字母、首字放大特效
- 贝壳找房二手房信息爬虫
- 图纸设计管理平台,彩虹图纸管理软件设计管理功能
- cuda矩阵相乘_CUDA计算矩阵相乘
- 环境部署经验老衲悄悄的
- 增加ATMEGA328 实验电路板对外引脚
热门文章
- docker数据卷之dockerfile
- 每天一道剑指offer-二进制中1的个数
- mysql 流浪,流浪汉机器 – 如何找出mysql用户名/密码
- 如何做爬虫python在线观看_Python爬虫实战:利用scrapy,短短50行代码下载整站短视频...
- 主成分分析法怎么提取图片中的字_视频图像的MATLAB处理(2)两种主成分分析方法...
- 谷粒商城:13.分布式基础篇总结
- table与tr td样式重叠 table样式边框变细
- Ubuntu无法安装Xmind rpm包
- 关于线程协同的火车票售卖程序
- 生成对抗网络系列—CycleGAN