冒泡排序法全攻略

1   算法介绍

  冒泡排序法又叫起泡法,在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。

2   算法目的

   按要求对一组元素从大到小或从小到大排序。

3   基本思想

   对未进行排序的元素从头到尾依次比较相邻的两个元素是否逆序(与指定顺序相反),若逆序,则交换这两个元素的位置,这样经过一轮比较过后便可把最大(或最小)的元素排好。然后按照同样的方法对剩下的元素进行比较,直到所有元素都按要求的顺序排列为止,这样就得到了想要的序列。

4   定量分析

   假设共有nn>=2)个元素需要进行排序,我们把从头到尾的一次比较过程叫着一轮排序,每一轮排序只能将一个元素排好,因此需要进行n-1轮排序才能将n个元素都排好(最后一轮排序只有一个元素,因此无需再进行这一轮排序)。

   因为每一轮排序只能排好一个元素,所以第i轮排序过后便会有i个元素被排好,n-i个元素还未排好,被排好的元素是第n-i+1个。在第i轮的排序过程中,会进行(n-i+1-1次比较。

5   算法流程图

6   算法分析

6.1 算法的时间复杂度

  算法的最好时间复杂度

  若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:

   Cmin=n-1

   Mmin=0

  冒泡排序最好的时间复杂度为O(n)

  算法的最坏时间复杂度

  若初始文件是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1in-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

  Cmax=n(n-1)/2=O(n2)

  Mmax=3n(n-1)/2=O(n2)

 冒泡排序的最坏时间复杂度为O(n2)

  算法的平均时间复杂度为O(n2)

6.2 算法的空间复杂度

 冒泡算法的辅助空间复杂度是O(1)

6.3 算法稳定性

 冒泡排序是就地排序,且它是稳定的。

7   算法实现

7.1  C实现

7.2  C#实现

7.3  C++实现

7.4  JAVA实现

谢谢你的鼓励和支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351675.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

js冒泡排序法

冒泡排序法 冒泡排序法其实也是一种最简单,最清晰明了的一种排序算法。主要的运行过程就是重复比较一个数组里面的所有元素,两两做比较,如果他们的顺序不对,则把他们交换位置,一直重复到没有再需要交换元素就结束循环…

冒泡排序法(C语言)

冒泡排序:相邻两个数两两比较,小的数向前移(上浮),大的数向后移(下沉),如同水中的泡泡上浮一般; 冒泡排序图示: 如果有N个数,则要跑N-1次比较&…

Word控件Spire.Doc 【其他】教程(6):从 Word 中提取 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

力扣刷题笔记——动态规划

动态规划基础 简称DP,如果某⼀问题有很多重叠⼦问题,使⽤动态规划是最有效的。 动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的 1. 确定dp 数组( dp table )以及下标的含义 2. 确定递推公式 3. dp 数组如何初始化 4. 确定遍…

【Java系列】MyBatis-Plus常见面试题

问题列表 Q1:MyBatis-Plus是什么?它有什么优点? MyBatis-Plus是MyBatis框架的一个扩展库,它提供了一系列方便的API和工具,可以简化常见的数据库操作。MyBatis-Plus的优点包括: 提高开发效率:My…

MQTT与EMQ

文章目录 1 MQTT协议与EMQ中间件1.1 物联网消息协议MQTT1.1.1 什么是MQTT1.1.2 MQTT相关概念1.1.3 消息服务质量QoS——信息的可靠投递1.1.3.1 QoS0——消息服务质量为0,消息发送至多一次1.1.3.2 QoS1——消息发送至少一次1.1.3.3 QoS2——消息发送仅一次1.1.3.4 不…

MTK平台的SWT异常的简单总结(2)——SWT原理和分析

(1)原理性 (2)SWT如何抓取Log 遇到SWT问题详细可参考MTK提供的FAQ:SWT机制介绍。 获取Ap Log的路径:/sdcard/debuglogger/mobilelog/APLog_XXXXX 获取db的路径:/data/aee_exp 如果db没有打包…

HBase统计表行数(RowCount)的四种方法

背景: 对于其他数据存储系统来说,统计表的行数是再基本不过的操作了,一般实现都非常简单;但对于HBase这种key-value存储结构的列式数据库,统计 RowCount 的方法却有好几种不同的花样,并且执行效率差别巨大&…

2023年测试人前景归途?我主攻自动化测试拿到了25k的offer...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

sqlserver 中 @@rowcount的简单用法

返回受上一语句影响的行数。如果行数大于 20 亿,请使用 ROWCOUNT_BIG。 语法 ROWCOUNT 返回类型 int 注释 Transact-SQL 语句可以通过下列方式设置 ROWCOUNT 的值: 将 ROWCOUNT 设置为 受影响或被读取的行的数目。可以将行发送到客户端,…

SQL中row_number函数用法

row_number函数用法 1、函数讲解2、LeetCode实战 1、函数讲解 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说,row_number()从1开始,为每条分组记录返回一个数字,举例: ROW_NUMBER() OVER(OR…

Hbase进行RowCount统计

对于Table内RowKey个数的统计,一直是HBase系统面临的一项重要工作,目前有三种执行该操作的方式。 测试环境: Apache版的 hadoop-2.6.0 (cdh版的hadoop-2.6.0-cdh5.5.2也可以) Apache版的 hbase-1.0.0 (一…

【完整版】2023二级建造师《建筑实务》真题答案解析(2天考3科)

2023二级建造师考试将在6月3日、4日举行,2023二建《市政实务》考试时间(2天考3科):6月4日 9:00-12:00, 考后甘建二将及时发布2023年二建市政实务真题及答案解析,敬请关注 2天考3科地区:四川、山…

DMBOK知识梳理for CDGA/CDGP——第三章数据治理

关 注gzh“大数据食铁兽” 回复“知识点”获取《DMBOK知识梳理for CDGA/CDGP》常考知识点(第三章数据治理) 第三章 数据治理 第三章在是CDGA|CDGP考试的重点考核章节之一,知识点比较密集,本章重点为语境关系图及数据治理概念…

LiangGaRy-学习笔记-Day19

1、回顾知识 1.1、文件系统说明 xfs与ext4文件系统 CentOS7以上:默认的就是XFS文件系统 xfs 使用的就是restore、dump等工具 CentOS6默认的就是ext4文件系统 extundelete工具就是用于ext4系统 1.2、回顾Linux文件系统 Linux文件系统是由三个部分组成 inode文…

一文学会MySQL四种安装方式

目录 🍁rpm方式安装 🍀下载软件包 🍀前置配置 🍀安装MySQL 🍁yum方式安装 🍀下载软件包 🍀安装MySQL 🍁二进制方式安装 🍀下载软件包 🍀安装MySQL &#x1f3…

2023最新网络安全面试题大全,看完这篇你的秋招offer就到手了!

前言 随着国家政策的扶持,网络安全行业也越来越为大众所熟知,想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外,除了学好网络安全知识以外,还要应对好企业的面试。 作为一个安全老鸟,工作这么多年…

【自定义CPU占用率】

题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况: 1. CPU的占用率固定在50%,为一条直线&…

控制cpu占有率

http://www.cnblogs.com/Ripper-Y/archive/2012/05/19/2508511.html CPU正弦曲线 1 #include <iostream>2 #include <cmath>3 #include <ctime>4 #include <windows.h>5 6 using namespace std;7 8 //得到循环0xFFFFFFFF次用的秒数9 unsigned int te…

CPU正弦曲线

CPU正弦曲线 1 #include <iostream>2 #include <cmath>3 #include <ctime>4 #include <windows.h>5 6 using namespace std;7 8 //得到循环0xFFFFFFFF次用的秒数9 unsigned int test() 10 { 11 unsigned int c 0xFFFFFFFF; 12 13 time_t t1…