[ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序

news2024/11/17 12:52:57

文章目录

  • 前言
  • 一、常见的排序算法
  • 二、冒泡排序的实现
    • 2.1 基本思想
    • 2.2 单趟冒泡排序
      • 2.2.1 思路分析
      • 2.2.2 单趟代码实现
  • 三、冒泡排序的实现
  • 五、冒泡排序的时间复杂度
    • 5.1 最坏情况
    • 5.2 最好情况
    • 优化
  • 六、冒泡排序的特性总结
  • 总结


前言

手撕排序算法第一篇:插入排序!
从本篇文章开始,我会介绍并分析常见的几种排序,例如像插入排序,冒泡排序,希尔排序,选择排序,快速排序,堆排序,归并排序等等!
这篇文章我先来给大家手撕一下冒泡排序

大家可以点下面的链接去阅读其他的排序算法:
C语言手撕排序算法


正文开始!

一、常见的排序算法

在这里插入图片描述

冒泡排序属于一种交换排序,因此我们在了解冒泡排序之前,先了解一下交换排序的基本思想。

基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。
交换排序的特点:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

二、冒泡排序的实现

2.1 基本思想

冒泡排序是一种简单的交换排序法,其基本思想是:对所有相邻记录的关键字值进行比较,如果是升序(array[j]>array[j+1]),则将其交换,最终达到有序化。

2.2 单趟冒泡排序

2.2.1 思路分析

单趟下来冒泡排序就会把最大的数字放在最后一位(升序)。在这里插入图片描述

2.2.2 单趟代码实现

	for (int j = 0; j < n - 1; j++)
	{
		if (a[j] > a[j + 1])
		{
			Swap(&a[j],&a[j+1]);
		}
	}

三、冒泡排序的实现

在单躺的基础下,加上一次大循环。
需要注意的是,每次循环冒出一个数字,因此单趟循环之后到下一次循环中比较次数就要减一,接下来看代码实现。

void Swap(int* x, int* y)
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}
void BubbleSort(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		int flag = 0;//flag判断是否是顺序排列,是的话直接就退出
		for (int j = 0; j < n - 1-i; j++)
		{
			if (a[j] > a[j + 1])
			{
				flag = 1;
				Swap(&a[j], &a[j + 1]);
			}
		}
		if (flag == 0)
		{
			break;
		}
	}
}
void TestBubbleSort()
{
	int a[] = { 6,3,1,4,2,5 };
	printf("排序前:");
	PrintArray(a, sizeof(a) / sizeof(a[0]));
	BubbleSort(a, sizeof(a) / sizeof(a[0]));
	printf("排序后:");
	PrintArray(a, sizeof(a) / sizeof(a[0]));
}
int main()
{
	TestBubbleSort();
	return 0;
}

测试结果:
在这里插入图片描述

五、冒泡排序的时间复杂度

5.1 最坏情况

最坏情况:逆序排顺序。假设有n个数,所以一共交换的次数为1+2+3+…+n
因此最坏的时间复杂度为O(n^2)。

5.2 最好情况

最好情况:有序排有序。对于冒泡排序来说,即使是有序仍然会把每个数进行冒泡。虽然有序,但是冒泡排序不知道呀,还需要继续冒下去。
因此最好的时间复杂度为O(n^2)。

优化

如果前几个已经有序,比较一遍之后后续的无序再进行比较 直接往后走
实现:定义一个flag变量,初始化为0;如果交换就说明变化,将flag变1.没变的话就说明有序,就不用往下走,直接break;

优化后对于最坏情况的时间复杂度是O(n^2);
优化后对于最好情况的时间复杂度是O(n);

六、冒泡排序的特性总结

冒泡排序的特性总结:
1.冒泡排序的思想容易理解。
2.时间复杂度为O(n^2);
3.空间复杂度为O(1);
4.稳定性:稳定


总结

(本章完!)

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

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

相关文章

截止12.17 bitahub踩坑,mask无数次更改,lama代码的那些痛,羊了个羊,imwrite不生效

前面那篇跑出了STCN&#xff0c;倒是STCN熟悉了很多了 对bitahub&#xff0c;需要注意一个问题 要进ssh请用debug卡&#xff01;&#xff01;&#xff01;&#xff01; 要进ssh请用debug卡&#xff01;&#xff01;&#xff01;&#xff01; 要进ssh请用debug卡&#xff01;&…

AQS-semaphoreCyclicBarrierCountDownLatch源码学习

上文&#xff1a;jdk-BlockingQueue源码学习源码下载&#xff1a;https://gitee.com/hong99/jdk8semaphore&cyclicbarrier&CountDownLatch的介绍semaphore基础功能semaphore简称信号量&#xff0c;主要用于控制访问特定资源的线程数目&#xff0c;底层用的是AQS的状记s…

[附源码]Python计算机毕业设计Django万佳商城管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Volatile和高速缓存的关系

“volatile关键字有什么用&#xff1f;” 1 常见理解错误 把volatile当成一种锁机制&#xff0c;认为给变量加上了volatile&#xff0c;就好像是给函数加sychronized&#xff0c;不同的线程对于特定变量的访问会去加锁把volatile当成一种原子化的操作机制&#xff0c;认为加了…

Dubbo 3 Dubbo 快速入门 3.1 Zookeeper 安装

Dubbo 【黑马程序员Dubbo快速入门&#xff0c;Java分布式框架dubbo教程】 3 Dubbo 快速入门 文章目录Dubbo3 Dubbo 快速入门3.1 Zookeeper 安装3.1.1 Zookeeper 安装3.1 Zookeeper 安装 3.1.1 Zookeeper 安装 在Dubbo 架构图中 Dubbo官方推荐使用Zookeeper作为注册中心【Re…

【学习总结】注解和元注解

目录 一、注解 1、注解与XML区别 2、注解的用途 3、注解的三种分类 二、什么是元注解&#xff1f; 1、元注解有几种&#xff1f; 1、Retention存活时间 2、Target使用范围 3、Document保存到javadoc 4、Inherited注解继承 三、如何实现的注解 四、问提&#xff1a; …

为解决BERT模型对语料中低频词的不敏感性

来源&#xff1a;投稿 作者&#xff1a;COLDR 编辑&#xff1a;学姐 &#xff08;内容如有错漏&#xff0c;可在评论区指出&#xff09; 摘要 Dict-BERT为了解决BERT模型对语料中低频词&#xff08;rare words&#xff09;的不敏感性&#xff0c;通过在预训练中加入低频词词典…

人工智能/计算机期刊会议测评(持续更新...更新速度取决于我水论文的速度...)

IEEE Transactions on Knowledge and Data Engineering 中科院2区&#xff0c;CCF A。你为什么是二区&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;做梦都想中的刊。 …

5天带你读完《Effective Java》(二)

《Effective Java》是Java开发领域无可争议的经典之作&#xff0c;连Java之父James Gosling都说&#xff1a; “如果说我需要一本Java编程的书&#xff0c;那就是它了”。它为Java程序员提供了90个富有价值的编程准则&#xff0c;适合对Java开发有一定经验想要继续深入的程序员…

Servlet 原来是这个玩意、看完恍然大悟

1. 什么是 Servlet&#xff1f; 先让时间回到 25 年前&#xff0c;我国刚刚接入互联网不到两年时间。那时候的电脑长这个样子&#xff1a; 当时的网页技术还不是很发达&#xff0c;大家打开浏览器只能浏览一些静态的页面&#xff0c;例如图片、文本信息等。 随着时间的发展&a…

[附源码]Python计算机毕业设计Django社区生活废品回收APP

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

idea配置tomcat日志中文乱码,且修改后idea正常,但cmd窗口任然中文乱码解决方法

idea日志乱码问题的原因是tomcat的日志配置文件有两行有问题需要删掉&#xff0c;cmd乱码是Windows系统cmd窗口默认不是utf-8 首先解决idea中tomcat的日志乱码问题&#xff0c;在idea中进行如下的配置 Trans...........可以不勾选&#xff0c;它的作用是用选定的字符集把项目的…

[附源码]Python计算机毕业设计Django室内设计类网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2023面试专题:JAVA基础

ArrayList和LinkedList有哪些区别 ArrayList扩容机制: ArrayList() 会使用长度为零的数组ArrayList(int initialCapacity) 会使用指定容量的数组public ArrayList(Collection<? extends E> c) 会使用 c 的大小作为数组容量add(Object o) 首次扩容为 10&#xff0c;再次…

【OpenCV】透视变换应用——实现鸟瞰图与贴图

透视变换是3D转换&#xff0c;透视变换的本质是将图像投影到一个新的视平面&#xff1b; 据此&#xff0c;我们可以使用透视变化来实现鸟瞰图和图形贴图的效果&#xff1b; 一、鸟瞰图 实现前&#xff1a; 实现效果&#xff1a; 1.准备一个空的mat对象 用于保存转换后的图 M…

asp.net mvc+elementUI 实现增删改查

最开始心想着一直都是前端玩这些玩意&#xff0c;个人虽然不是纯前端。好歹做为一个.net全栈开发多年&#xff0c;我就不太想用node去搭建&#xff0c;那么试试吧&#xff0c;总归不是那么几个css和js的文件引用&#xff0c;如果对vue.js不太熟悉&#xff0c;最好先去看看。 那…

智能家居创意DIY之智能触摸面板开关

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

springboot入门案例

今天写一个springboot入门案例&#xff0c;接下来我将带大家走进springboot第一课的案例。如果有问题&#xff0c;望大家指正。 目录 1. 简介 2. 开发示例 2.1 创建springboot工程 3. 启动类 4. 常用注解 5. springboot配置文件 6. 开发一个controller 1. 简介 Spring …

大一学生WEB前端静态网页——旅游网页设计与实现(15页面)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Git GitHub入门

目录Git1. 安装Git1. 下载Git2. 安装Git2. Git常用命令1. 设置用户签名2. 初始化本体库3. 查看本地库状态4. 添加暂存区5. 提交本地库6. 查看历史记录7. 修改文件8. 版本穿梭3. Git分支操作1. 查看分支2. 创建分支3. 切换分支4. 合并分支GitHub操作1. 创建远程仓库2. 远程仓库操…