当前位置: 首页 > news >正文

数据结构与算法:2,冒泡排序

以从小到大排序为例:

冒泡排序步骤:

1,从左到右(或从右到左)对比相邻两个数,左边的数 大于 右边的数 则交换位置

2,重复第一个步骤

看代码:

1,从左到右(或从右到左)对比相邻两个数,左边的数 大于 右边的数 则交换位置

#include<iostream> 
int main()
{//示例  从小到大排序
	int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };
	for (int i = 0;i < 10;i++)
	{
		if (i == 9)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出
		if (x[i] > x[i + 1])
		{
			int 临时存储 = x[i];
			x[i] = x[i + 1];
			x[i + 1] = 临时存储;
		}
	}

	//输出数组中每个值 看看效果
	for (int i=0;i<10;i++)
	{
		std::cout << x[i] << " ";
	}
	std::cout<<std::endl;
	return 0;
}

2,重复第一个步骤

#include<iostream> 
int main()
{//示例  从小到大排序
	int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };

	for (int j = 0;j < 10;j++)//步骤2
	{
		for (int i = 0;i < 10;i++)//步骤1 
		{
			if (i == 9)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出
			if (x[i] > x[i + 1])
			{
				int 临时存储 = x[i];
				x[i] = x[i + 1];
				x[i + 1] = 临时存储;
			}
		}
	}
	//输出数组中每个值 看看效果
	for (int i=0;i<10;i++)
	{
		std::cout << x[i] << " ";
	}
	std::cout<<std::endl;
	return 0;
}

用类来实现

#include<iostream> 

class A
{
public:
	int x[10];
	A()//构造函数里 初始化数组中的值
	{
		x[0] = 3,x[1] = 4,x[2] = 45,x[3] = 5,x[4] = 43,	x[5] = 23,x[6] = 24,x[7] = 2543,x[8] = 25,x[9] = 342;
	}
	void 输出()
	{
		for (int i = 0;i < 10;i++)
			std::cout << x[i] << " ";
		std::cout << std::endl;
	}
	void 交换(int 位置a, int 位置b)
	{
		int c= x[位置a];
		x[位置a] = x[位置b];
		x[位置b] = c;
	}
	void 把最大值往右移(int 结束位置)
	{
		for (int i = 0; i < 结束位置;i++)
		{
			//if (i == 结束位置)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出
			if (x[i] > x[i + 1])
			{
				交换(i, i + 1);
			}
		}
	}
	void 开始冒泡排序()//这里演示 从大到小排序
	{
		for (int i = 9; i>=0;i--)
		{
			把最大值往右移(9);
			输出();//展示一下 每次移到后的 数组
		}
	}
};
int main()
{
	A a;
	std::cout << " 开始前 \n";
	a.输出();//排序前 输出一下 看看效果
	std::cout << " 排序中 \n";
	a.开始冒泡排序();
	std::cout << " 完成 \n";
	a.输出();//排序后 输出一下 看看效果
	return 0;
}

优化一下,减少计算次数,先看代码,(代码 下面有解析)

#include<iostream> 

class A
{
public:
	int x[10];
	A()//构造函数里 初始化数组中的值
	{
		x[0] = 3, x[1] = 4, x[2] = 45, x[3] = 5, x[4] = 43, x[5] = 23, x[6] = 24, x[7] = 2543, x[8] = 25, x[9] = 342;
	}
	void 输出()
	{
		for (int i = 0;i < 10;i++)
			std::cout << x[i] << " ";
		std::cout << std::endl;
	}
	void 交换(int 位置a, int 位置b)
	{
		int c = x[位置a];
		x[位置a] = x[位置b];
		x[位置b] = c;
	}
	bool 把最大值往右移(int 结束位置)
	{
		bool 交换位置 = false;
		for (int i = 0; i < 结束位置;i++)
		{
			//if (i == 结束位置)break;//最后一个值  没有i+1  加上这句,防止数组引用时 溢出
			if (x[i] > x[i + 1])
			{
				交换(i, i + 1);
				交换位置 = true;
			}
		}
		return 交换位置;
	}
	void 开始冒泡排序()//这里演示 从大到小排序
	{
		bool 交换位置 = true;
		for (int i = 9; i >= 0;i--)
		{
			if (!把最大值往右移(9))break;
			输出();//展示一下 每次移到后的 数组
		}
	}
};
int main()
{
	A a;
	std::cout << " 开始前 \n";
	a.输出();//排序前 输出一下 看看效果
	std::cout << " 排序中 \n";
	a.开始冒泡排序();
	std::cout << " 完成 \n";
	a.输出();//排序后 输出一下 看看效果
	return 0;
}

解析:

之前的代码 也优化一下:

#include<iostream> 
int main()
{//示例  从小到大排序
	int x[10] = { 3,4,45,5,43,23,24,2543,25,342 };

	for (int j = 9;j>=0;j--)//步骤2
	{
		bool 移动 = false;
		for (int i = 0;i < j;i++)//步骤1 
		{
			if (x[i] > x[i + 1])
			{
				int 临时存储 = x[i];
				x[i] = x[i + 1];
				x[i + 1] = 临时存储;
				移动 = true;
			}
		}
		if (!移动)break;
	}
	//输出数组中每个值 看看效果
	for (int i = 0;i < 10;i++)
	{
		std::cout << x[i] << " ";
	}
	std::cout << std::endl;
	return 0;
}

相关文章:

  • 配置完nfs后vmware虚拟机下ubuntu/无法联网问题
  • iPaaS集成平台如何帮助制造业实现数字化转型
  • 某投行日志记录解决方案二之日志异步落盘: 自定义注解+反射+AOP+异步多线程,实现高并发场景下的统一日志治理方案
  • 【Android】屏幕刷新机制(概览)
  • vs2017开启性能探测器失败
  • 【计算机操作系统】线程的概念和特点
  • 如何通过python将视频转换为字符视频
  • 优化 Docker 构建之方法(Methods for Optimizing Docker Construction)
  • 验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
  • 城电科技|零碳园区光伏太阳花绽放零碳绿色未来
  • 《论语别裁》第02章 为政(08) 诗的伟大
  • GenBI 中如何引入 LLM 做意图路由,区分查数据还是闲聊
  • 【ManiSkill】环境success条件和reward函数学习笔记
  • 解决HuggingFaceEmbeddings模型加载报错:缺少sentence-transformers依赖包
  • 作业(6)
  • WebGL图形编程实战【3】:矩阵操控 × 从二维到三维的跨越
  • 将网页操作的脚本自动保存成yaml ,然后修改使用
  • vueRouter的hash模式跟history的区别
  • pip show protobuf ValueError: invalid literal for int() with base 10: ‘‘
  • 小迪安全109-php模型动态调试,反序列化,变量覆盖,tp框架,原生pop链
  • 会计上网站建设做什么费用/百度app官网下载
  • 阿里快速建站/seo推广小分享
  • 科网站建设/网站关键词百度自然排名优化
  • 湖南做网站 在线磐石网络/网络广告推广方式
  • 只做汽车的网站/直接进网站的浏览器
  • 兰州做网站优化的公司/百度一下就知道