【冒泡排序及其优化】

news2025/9/18 22:53:25

冒泡排序及其优化

冒泡排序核心思想

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较

1题目举例

给出一个倒序数组:arr[10]={9,8,7,6,5,4,3,2,1,0}
请排序按小到大输出

1.1题目分析

这是一个完全倒序的数组,所以确定冒泡排序的趟数,就是需要九趟冒泡排序

1.2冒泡排序函数实现

//冒泡排序函数
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{
	//确定冒泡排序趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)//确定交换的对数
		{
			if (*(arr + j) > *(arr + j + 1))
			{
				//交换
				int temp = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = temp;
			}
		}
	}
}

1.3打印数组函数实现

//打印数组函数
void print(int* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(arr++));
	}
}

1.4完整代码实际代入实现

#include<stdio.h>
//冒泡排序
//冒泡排序函数
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{
	//确定冒泡排序趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)//确定交换的对数
		{
			if (*(arr + j) > *(arr + j + 1))
			{
				//交换
				int temp = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = temp;
			}
		}
	}
}
//打印数组函数
void print(int* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(arr++));
	}
}
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	print(arr, sz);

	return 0;
}

1.5运行结果展示

在这里插入图片描述

2.题目举例

假设给出一个极端数组arr[10]={9,0,1,2,3,4,5,6,7,8}
给他排序,按小到大输出

2.1题目分析

我们观察题目就会发现,这个数组只需1趟冒泡排序就会完成排序要求,但是,如果我们依旧使用上面那个冒泡排序的代码,他就会任然在一趟排好的情况下,继续两两比较,这样,就会大大浪费时间,所以我们就可以对以上冒泡排序代码进行优化。

2.2冒泡排序函数优化实现

//冒泡排序函数优化
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{
	//确定冒泡排序趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int flag = 1;//假设数组是有序的
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)//确定交换的对数
		{
			if (*(arr + j) > *(arr + j + 1))
			{
				//交换
				int temp = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = temp;
				flag = 0;//不是有序
			}
		}
		if (flag == 1)//如果已经有序,就跳出循环
		{
			break;
		}
	}
}

2.3打印数组函数实现

//打印数组函数
void print(int* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(arr++));
	}
}

2.4完整代码优化实际代入实现

//冒泡排序优化
//冒泡排序函数优化
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{
	//确定冒泡排序趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int flag = 1;//假设数组是有序的
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)//确定交换的对数
		{
			if (*(arr + j) > *(arr + j + 1))
			{
				//交换
				int temp = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = temp;
				flag = 0;//不是有序
			}
		}
		if (flag == 1)//如果已经有序,就跳出循环
		{
			break;
		}
	}
}
//打印数组函数
void print(int* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(arr++));
	}
}
int main()
{
	int arr[] = { 9,0,1,2,3,4,5,6,7,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	print(arr, sz);

	return 0;
}

2.5运行结果展示

在这里插入图片描述

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

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

相关文章

机器学习笔记之优化算法(十三)关于二次上界引理

机器学习笔记之优化算法——关于二次上界引理 引言回顾&#xff1a;利普希兹连续梯度下降法介绍 二次上界引理&#xff1a;介绍与作用二次上界与最优步长之间的关系二次上界引理证明过程 引言 本节将介绍二次上界的具体作用以及它的证明过程。 回顾&#xff1a; 利普希兹连续…

svg圆形进度条

css3实现的圆形进度条较复杂&#xff0c;代码量较多&#xff0c;本文稍微讲解下如何使用svg实现圆形进度条。 svg实现一个圆用<circle>元素&#xff1a; <svg viewBox"0 0 100 100" xmlns"http://www.w3.org/2000/svg"><circle cx"50…

腾讯云服务器CPU标准型S5/S6/SA3/SR1/SA2处理器大全

腾讯云服务器CVM标准型CPU处理器大全&#xff0c;包括标准型S6、SA3、SR1、S5、S5se、SA2、S4、SN3ne、S3、SA1、S2ne实例CPU处理器型号大全&#xff0c;标准型S6云服务器CPU采用Intel Ice Lake(2.7GHz/3.3GHz)&#xff0c;标准型S5采用Intel Xeon Cascade Lake 8255C/Intel Xe…

day4 USART串口的应用

同步和异步通信 通信&#xff0c;最少要有两个对象&#xff0c;一个收&#xff0c;一个发。 同步通信&#xff1a;一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号&#xff0c;大家根据时钟信号的变化进行通信。 异步通信&…

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 人物提示词配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成&#xff0c;融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式&#xff0c;创造了…

2023MacBook电脑清理垃圾软件CleanMyMac X

用久了的MacBook&#xff0c;会出现系统反应缓慢卡顿等现象&#xff0c;这主要原因是系统垃圾的堆积。MacBook清理&#xff0c;就很有必要了&#xff0c;特别的垃圾清理。因此&#xff0c;定期清理这些垃圾文件是保持MacBook高效运行的重要任务之一。本文将介绍一些高效的方法&…

【LeetCode】122. 买卖股票的最佳时机 II - 贪婪算法

目录 2023-8-10 10:29:32 122. 买卖股票的最佳时机 II 2023-8-10 10:29:32 没错&#xff0c;还是用双指针思想来套出来的。 感觉步骤很复杂&#xff0c;还调试了半天。 class Solution {public int maxProfit(int[] prices) {int pre 0;int last 1;int maxProfit 0;int c…

timerfd和timer

note timerfd对应的时钟到期后&#xff0c;对应内部数据(uint64)计数加1 timerfd支持read方法&#xff0c;poll方法 code #include <sys/timerfd.h> #include <poll.h> #include <thread> #include <stdio.h> #include <string.h> #include …

代码随想录算法训练营day29 | 491. 递增子序列,46. 全排列,47. 全排列 II

目录 491. 递增子序列 46. 全排列 47. 全排列 II 491. 递增子序列 难度&#xff1a;medium 类型&#xff1a;回溯&#xff0c;类子集问题 思路&#xff1a; 因为不能排序&#xff0c;所以不能使用 40. 组合总和 II 的去重方式。使用hashset来对递归树的某一层去重。 代码…

为什么要学习Oracle技术?

为什么要学习Oracle技术? 众所周知&#xff0c;Oracle占据着企业数据库领域超过48.1%的市场份额&#xff0c;成为高端企业数据库软件的绝对领导者。随着时间的推移&#xff0c;企业数据库的规模不断扩大&#xff0c;富有经验的资深OracleDBA越来越受到企业的欢迎。我们从著名的…

cmake基础(2)——动/静态库

一、静态库创建 1. 准备 首先创建目录和文件结构如下&#xff1a; 文件内容如下&#xff1a; class Hello { public:void print(); }; #include "hello.h" #include <iostream>void Hello::print() {std::cout << "hello world!" <<…

详细记录Pycharm配置已安装好的Conda虚拟环境

当安装好conda环境之后&#xff0c;想要在Pycharm中使用&#xff0c;那么就要在Pycharm中导入&#xff0c;我这里使用的pycharm-professional-2023.2这个版本&#xff0c;下面是详细步骤&#xff1a; 1.打开File->Settings&#xff1a; 2.找到Project——>Python Inter…

javascript获取设置输入框内容

代码&#xff0c; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>获取设置输入框内容</title> </head> <body><button onclick"getinput()">click me</button><div id&qu…

float 属性的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ float 是什么&#xff1f;⭐ float 属性值⭐ 使用 float 的注意事项&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…

FPGA优质开源项目 – PCIE通信

本文介绍一个FPGA开源项目&#xff1a;PCIE通信。该工程围绕Vivado软件中提供的PCIE通信IP核XDMA IP建立。Xilinx提供了XDMA的开源驱动程序&#xff0c;可在Windows系统或者Linux系统下使用&#xff0c;因此采用XDMA IP进行PCIE通信是比较简单直接的。 本文主要介绍一下XDMA I…

平替 Docker - 玩转容器新利器 Podman Desktop (视频)

《OpenShift 4.x HOL教程汇总》 在 podman-desktop 1.2.1 podman 4.4 环境中验证。 文章目录 什么是 podman 和 podman-desktop安装 podman 和 podman-desktop 基本环境Image、Container 和 Pod 的基本操作拉取 Image运行 Container 将 Pod 部署到 Kubernetes安装 Kind 扩展插…

【数学建模】--因子分析模型

因子分析有斯皮尔曼在1904年首次提出&#xff0c;其在某种程度上可以被看成时主成分分析的推广和扩展。 因子分析法通过研究变量间的相关稀疏矩阵&#xff0c;把这些变量间错综复杂的关系归结成少数几个综合因子&#xff0c;由于归结出的因子个数少于原始变量的个数&#xff0c…

List集合按照由小到大排序或者由大到小排序

文章目录 背景原代码由小到大排序由大到小排序 背景 原List<User>里面是无序的&#xff0c;比如从redis查找等情况&#xff0c;查出来的是无序的&#xff0c;现在想按照由小到大排序或者由大到小排序。 原代码 List<User> list new ArrayList<>(); list.ad…

义诊24小时在线,消杀物资驰援,阿里健康全力支援灾后防疫

近日&#xff0c;京津冀等地遭遇严重暴雨洪涝灾害。洪涝灾害后易引发地质灾害、污染、疫病等次生灾害&#xff0c;即使暴雨和洪水退去也不可掉以轻心&#xff0c;灾后疾病预防是关键。 阿里健康密切关注灾情进展&#xff0c;了解到当地急需消杀物资&#xff0c;第一时间联合可…

时序分析:Python 中的 ARIMA 模型

推荐&#xff1a;使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景 什么是ARIMA模型&#xff1f; ARIMA 模型是用于分析和预测时间序列数据的统计模型。ARIMA 方法明确迎合了时间序列中的标准结构&#xff0c;为制作熟练的时间序列预测提供了一种简单而强大的方法。 …