排序算法-冒泡排序法(BubbleSort)

排序算法-冒泡排序法(BubbleSort)

1、说明

冒泡排序法又称为交换排序法,是从观察水中的气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡从水底逐渐冒升到水面上一样。如此扫描过一次之后就可以确保最后一个元素位于正确的顺序。接着逐步进行第二次扫描,直到完成所有元素的排序为止。

2、算法分析

  1. 最坏情况和平均情况均需比较:次,时间复杂度为。最好情况只需完成一次扫描,若发现没有进行数据互换位置的操作,则表示已经排序完成,所以只进行了n-1次比较,时间复杂度为
  2. 由于冒泡为相邻两个数据相互比较而后决定是否互换位置,并不会改变原来排列的顺序,因此属于稳定排序法。
  3. 因为只需一个额外的空间,所以空间复杂度为最佳。
  4. 此排序法适用于数据量小或有部分数据已经过排序的情况。

3、C++代码

第一种案例

cpp 复制代码
#include<iostream>
using namespace std;

int main() {

	int data[6] = { 6,5,9,7,2,8 };

	cout << "原始数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;
	cout << "-----------" << endl;
	//第1次排序后的结果是:
	//5  6  7  2  8  9
	//第2次排序后的结果是:
	//5  6  2  7  8  9
	//第3次排序后的结果是:
	//5  2  6  7  8  9
	//第4次排序后的结果是:
	//2  5  6  7  8  9
	//第5次排序后的结果是:
	//2  5  6  7  8  9
	for (int i = 5; i > 0; i--) {
		for (int j = 0; j < i; j++) {
			if (data[j] > data[j + 1]) {
				int temp = 0;
				temp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = temp;
			}
		}
		cout << endl;
	}
	cout << "最终数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;

	return 0;
}

输出结果

第二种案例

cpp 复制代码
#include<iostream>
using namespace std;

int main() {

	int data[6] = { 6,5,9,7,2,8 };
	
	cout << "原始数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;
	cout << "-----------" << endl;
	//第1次排序后的结果是:
	//5  6  7  2  8  9
	//第2次排序后的结果是:
	//5  6  2  7  8  9
	//第3次排序后的结果是:
	//5  2  6  7  8  9
	//第4次排序后的结果是:
	//2  5  6  7  8  9
	for (int i = 5; i >= 0; i--) {
		int flag = 0;
		for (int j = 0; j < i; j++) {
			if (data[j] > data[j + 1]) {
				int temp = 0;
				temp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = temp;
				flag++;
			}
		}
		if (flag == 0)
			break;
	}
	cout << "最终数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}

	return 0;
}

输出结果

相关推荐
繁依Fanyi23 分钟前
使用 Spring Boot + Redis + Vue 实现动态路由加载页面
开发语言·vue.js·pytorch·spring boot·redis·python·算法
aloha_78929 分钟前
B站宋红康JAVA基础视频教程(chapter14数据结构与集合源码)
java·数据结构·spring boot·算法·spring cloud·mybatis
星尘安全30 分钟前
一种新的电子邮件攻击方式:AiTM
开发语言·网络安全·php·网络钓鱼·aitm
尘浮生38 分钟前
Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea
float_com38 分钟前
【STL】 set 与 multiset:基础、操作与应用
c++·stl
鸽芷咕39 分钟前
【Python报错已解决】xlrd.biffh.XLRDError: Excel xlsx file; not supported
开发语言·python·机器学习·bug·excel
临沂堇1 小时前
CCF刷题计划——训练计划(反向拓扑排序)
数据结构·c++·算法·拓扑·ccf
铁匠匠匠1 小时前
【C总集篇】第八章 数组和指针
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
猿饵块1 小时前
cmake--get_filename_component
java·前端·c++
Unicorn建模1 小时前
2024“华为杯”中国研究生数学建模竞赛(E题)深度剖析|数学建模完整过程+详细思路+代码全解析
python·算法·数学建模