排序算法--冒泡排序

news/2024/9/24 10:53:24/

前提:

      交换排序:根据序列中两个值的比较结果来交换这两个数在序列中的位置,交换排序的特点是:将值较大的数向序列的尾部移动,值较小的数向序列的前部移动。

算法分析:

     冒泡排序,英语名是Bubble Sort,是一种最基础的交换排序。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。所以数据就像气泡一样,根据大小一点一点的移动。

看动图:

举个例子:

 

单趟排序:目的将最大的排到最右边

  比较3和9:

比较9和7:

比较9和4:

比较9和11:

比较11和4:

单趟最终:

将最大的11挪到最右边。

如上面的单趟排序:

 

第五次排序实际上就已经有序了

  根据上面的分析:

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){for (int i = 1; i < n-j; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);}}}//i=0也可以,i=0时,i<n-1-j;比较的是a[i]与a[i+1];

这里使用双循环进行排序。外面的循环控制所有回合,内部循环是单趟排序,将最大的移到右边,如果a[i-1]比a[i]小,两数就交换。

 时间复杂度:

冒泡排序是稳定的,算法时间复杂度是O(n ^2)。

由于冒泡排序的每一轮都要遍历一遍所有的元素,轮转的次数和元素数量相当,所以时间复杂度为O(N^2)。

 冒泡排序时间复杂度最好是多少呢?O(n)?

 假如整个数组有序,冒泡排序遍历一遍确实是O(n)。但是上面的代码可以实现吗?计算机怎么知道完全有序呢?所以要想O(n),我们还需要给一个标志:

我们给定一个标志exchange,将exchange设置为false。如果这次排序交换了数据,exchange发生变化。如果没发生变化,说明整个数组已经有序,就退出循环。

 


http://www.ppmy.cn/news/1453335.html

相关文章

推荐网站(1)懒人Excel,函数公式、操作技巧等,一看就看会

相信很多小伙伴打开excel表的时候&#xff0c;不知道要怎么操作&#xff0c;也不知道该如何搜索自己想要的结果&#xff0c;那么我推荐个网站懒人Excel&#xff0c;它可以帮我们快速了解使用 EXCEL的基本操作&#xff0c;也可以帮我们解决使用 EXCEL的遇到的问题。 可以看到他…

如何确定Unity/VNXe存储的主控制器(Primary SP)

DELL EMC的Unity或者VNXe存储都是双控的架构&#xff08;VNXe 1代设备有部分支持单控配置&#xff09;&#xff0c;有些的CLI检查命令是必须在primary SP&#xff0c;也就是主控制器上执行的&#xff0c;那么问题来了&#xff0c;如何确定两个控制器中那个是主控制器呢&#xf…

MySQL45讲(一)(44)

该文章提到的是问题 有一个知识点就是不一定left join的左边就一定是驱动表&#xff0c;就比如左边如果查询的列是有索引的&#xff0c;那么在使用索引的情况下&#xff0c;右边的表应该是驱动表 对于SNL和BNL的区别在于&#xff0c;对于被驱动表的匹配条件一个是每一行会先在…

轻松应对数据恢复挑战:雷神笔记本,不同情况不同策略

在数字化时代&#xff0c;数据无疑是我们生活中不可或缺的一部分。无论是重要的工作文件、珍贵的家庭照片&#xff0c;还是回忆满满的视频&#xff0c;一旦丢失&#xff0c;都可能给我们的生活带来诸多不便。雷神笔记本作为市场上备受欢迎的电脑品牌&#xff0c;用户在使用过程…

程序的机器级表示——Intel x86 汇编讲解

往期地址&#xff1a; 操作系统系列一 —— 操作系统概述操作系统系列二 —— 进程操作系统系列三 —— 编译与链接关系操作系统系列四 —— 栈与函数调用关系操作系统系列五 —— 目标文件详解操作系统系列六 —— 详细解释【静态链接】操作系统系列七 —— 装载操作系统系列…

开源免费的网盘项目Cloudreve,基于Go云存储个人网盘系统源码(七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive)

项目简介&#xff1a; 在现今的网盘服务中&#xff0c;用户经常遭遇限速和价格上涨的问题&#xff0c;这无疑增加了使用上的困扰。 为此&#xff0c;我今天要介绍一款开源且免费的网盘项目——Cloudreve。 这个项目是基于Go语言开发的云存储个人网盘系统&#xff0c;支持多种…

幼猫粮适合几个月的猫?

关于幼猫粮的选择&#xff0c;你是否有过疑惑呢&#xff1f;幼猫粮适合几个月的猫呢&#xff1f;今天&#xff0c;就让我来为大家详细解答这个问题吧&#xff01;&#x1f43e; 首先&#xff0c;我们要明确一点&#xff0c;幼猫粮是为4-12个月大的小猫咪特别设计的。在这个阶段…

从零开始学AI绘画,万字Stable Diffusion终极教程(四)

【第4期】图生图 欢迎来到SD的终极教程&#xff0c;这是我们的第四节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在前面的课程中&#xff0c;我…