排序算法——冒泡排序详解及优化

这篇具有很好参考价值的文章主要介绍了排序算法——冒泡排序详解及优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

排序的稳定性

对于一个排序算法,假设两个相同的元素Ai和Aj·
在排序前这两个元素满足条件i<j,即Ai在Aj之前·
在排序后Ai仍在Aj之前,则称为排序算法为稳定排序·
否则称这个算法为不稳定排序

稳定性的说明
排序的稳定性并不影响排序算法的效率,稳定性只对类/结构体类型数据有影响

冒泡排序

这里全部以从小到大(升序)为例讲解
冒泡排序介绍
基本思想:每轮不断将元素进行两两比较,并按“前小后大"规则交换实现思路:
比较相邻元素,若前者大于后者,两元素进行交换
对每组相邻元素,实现上述步骤,在第一轮结束后,最后一个元素即为最大值重复上述步骤,每次比较次数减1,直到无需比较,排序结束

排序算法——冒泡排序详解及优化

排序算法——冒泡排序详解及优化

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

void bubbleSort(int arr[], int len)
{
	//外层循环 len-1次
	for (int i = 0; i < len - 1; i++)
	{
		//内层循环len-i-1
		for (int j = 0; j < len - i - 1; j++)
		{
			//相邻元素,前者大于后者,进行交换
			if (arr[j]>arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

//打印数组
void printArray(int arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << "";
	}
	cout << endl;
}

void test01()
{
	int arr[8] = { 2,5,4,5,7,1,3,6 };

	//数组中的元素个数
	int len = sizeof(arr) / sizeof(int);

	//调用冒泡排序
	bubbleSort(arr, len);

	//打印数组
	printArray(arr, len);
}

int main()
{
	test01();
	system("pause");
	return EXIT_SUCCESS;
}

排序算法——冒泡排序详解及优化

优化后的冒泡排序

我们先观察此冒泡排序的具体的步骤,用下面这段代码即可实现

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//打印数组
void printArray(int arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << "";
	}
	cout << endl;
}

void bubbleSort(int arr[], int len)
{
	//外层循环 len-1次
	for (int i = 0; i < len - 1; i++)
	{
		//内层循环len-i-1
		for (int j = 0; j < len - i - 1; j++)
		{
			//相邻元素,前者大于后者,进行交换
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
		//打印数组
		printArray(arr, len);
	}
}

void test01()
{
	int arr[8] = { 2,5,4,5,7,1,3,6 };

	//数组中的元素个数
	int len = sizeof(arr) / sizeof(int);

	//调用冒泡排序
	bubbleSort(arr, len);
}

int main()
{
	test01();
	system("pause");
	return EXIT_SUCCESS;
}

排序算法——冒泡排序详解及优化
排序算法——冒泡排序详解及优化
下面是优化后的冒泡排序

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//打印数组
void printArray(int arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << "";
	}
	cout << endl;
}


void bubbleSort2(int arr[], int len)
{
	bool flag = true;//true 代表交换过  false代表还没交换
	//外层循环 len-1次
	for (int i = 0; i < len - 1; i++)
	{
		flag = false;//每轮初始化状态为真
		//内层循环len-i-1
		for (int j = 0; j < len - i - 1; j++)
		{
			//相邻元素,前者大于后者,进行交换
			if (arr[j]>arr[j+1])
			{
				flag = true;//发生交换  状态改为真
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
		if (flag==false)
		{
			break;
		}
		printArray(arr, len);
	}
}

void test02()
{
	int arr[8] = { 2,5,4,5,7,1,3,6 };

	//数组中的元素个数
	int len = sizeof(arr) / sizeof(int);

	//调用冒泡排序
	bubbleSort2(arr, len);
}

int main()
{
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

排序算法——冒泡排序详解及优化
最终代码

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//打印数组
void printArray(int arr[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << "";
	}
	cout << endl;
}


void bubbleSort2(int arr[], int len)
{
	bool flag = true;//true 代表交换过  false代表还没交换
	//外层循环 len-1次
	for (int i = 0; i < len - 1 && flag==true; i++)
	{
		flag = false;//每轮初始化状态为真
		//内层循环len-i-1
		for (int j = 0; j < len - i - 1; j++)
		{
			//相邻元素,前者大于后者,进行交换
			if (arr[j]>arr[j+1])
			{
				flag = true;//发生交换  状态改为真
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

void test02()
{
	int arr[8] = { 2,5,4,5,7,1,3,6 };

	//数组中的元素个数
	int len = sizeof(arr) / sizeof(int);

	//调用冒泡排序
	bubbleSort2(arr, len);

	//打印
	printArray(arr, len);

}

int main()
{
	test02();
	system("pause");
	return EXIT_SUCCESS;
}

排序算法——冒泡排序详解及优化

冒泡排序的复杂度

排序算法——冒泡排序详解及优化文章来源地址https://www.toymoban.com/news/detail-456627.html

到了这里,关于排序算法——冒泡排序详解及优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【排序算法略解】(十种排序的稳定性,时间复杂度以及实现思想)(含代码)(完工于2023.8.3)

    注:以下排序默认为升序排序。 稳定性:指的是排序的过程中是否会改变多个相同的值的相对次序,如果会改变则是不稳定的。 冒泡排序,选择排序,插入排序是最简单的排序方法。 排序方法:扫描的过程中,比较相邻两个数的大小关系,如果存在逆序就交换这两个数,这

    2024年02月13日
    浏览(49)
  • 百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性

    摘要 尽管mRNA疫苗已用于COVID-19的预防,但仍然面临不稳定和易降解的风险,这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明, 增加二级结构可延长mRNA的半衰期 ,再加上 选择优化的密码子,可改善蛋白表 达。因此,原则上mRNA的设计算法必须优化二级结

    2024年02月08日
    浏览(53)
  • 基于遗传算法优化BP神经网络的滑坡稳定性预测,BP神经网络的详细原理

    目录 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 遗传算法原理 遗传算法主要参数 遗传算法流程图 完整代码包含数据下载链接: 遗传算法优化BP神经网络的MATALB代码,遗传算法优化BP神经网络

    2024年02月05日
    浏览(55)
  • 【八大排序(十)】八大排序效率与稳定性分析

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 比较八大排序不能直接将 这八个排序放在一起讨论 我们根据大致效率将它们分为两组: (每个排序的详情链接在后面) 1. 第一组 插入排

    2024年02月11日
    浏览(54)
  • 百度SEO优化不稳定的原因分析(提升网站排名的稳定性)

    百度SEO优化不稳定介绍蘑菇号-www.mooogu.cn SEO不稳定是指网站在搜索引擎中的排名不稳定,随着时间的推移会发生变化。这种情况可能会出现在网站页面结构、内容质量、外链质量等方面存在缺陷或不合理之处。因此,优化SEO非常重要,可以提高网站的稳定性和排名。掌上帮教

    2024年02月07日
    浏览(121)
  • 数据结构--堆的实现-大根堆/小根堆/堆排序/堆排序稳定性证明/TOP-K

            前言          逆水行舟,不进则退!!!                目录        认识堆        堆的创建         1,向下调整的方法建立堆         2,以向下调整的方式建立小根堆         3,向上调整的方式建堆        堆的插入        堆的删除              

    2024年02月04日
    浏览(52)
  • 数学建模之稳定性模型详解

    码字总结不易,老铁们来个三连: 点赞、关注、评论 作者:[左手の明天]   原创不易,转载请联系作者并注明出处 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 对象仍是动态过程,而建模目的是研究时间充分长以后过程的

    2024年02月05日
    浏览(49)
  • Linux TCP队列的实例详解,提高网络性能和稳定性!

    📚 个人网站:ipengtao.com TCP 队列是 Linux 操作系统中关键的网络管理组件,它们有助于控制和优化网络连接的性能。在这篇文章中,将深入研究 Linux TCP 队列的工作原理、配置选项以及提供丰富的示例代码,以帮助大家更好地理解和管理 TCP 队列。 在理解 TCP 队列之前,需要了

    2024年01月18日
    浏览(52)
  • 【博客683】k8s list请求优化以及合理使用list以维护集群稳定性

    1、LIST apis/cilium.io/v2/ciliumendpoints?limit=500resourceVersion = 0 这里同时传了两个参数,但 resourceVersion=0 会导致 apiserver 忽略 limit=500, 所以客户端拿到的是全量 ciliumendpoints 数据 此时不会查etcd,因为有resourceVersion = 0,且resourceVersion = 0会忽略limit,因为limit一定要查etcd 一种资源的全

    2024年02月15日
    浏览(42)
  • 时间复杂度、空间复杂度、算法的稳定性说明以及示例

    目录 时间复杂度 空间复杂度 算法的稳定性 总结 时间复杂度是评估算法性能的一种方式,主要衡量的是算法在运行时所需要的时间或者操作的次数。在计算机科学中,我们通常用大O表示法来描述时间复杂度。 大O表示法主要关注的是算法在最坏情况下的时间复杂度,它描述

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包