排序算法:冒泡排序

冒泡排序
原理:每次比较相邻的两个元素,然后在满足一定条件情况交换相邻两个元素

5 3 1 4 2

一趟冒泡(当前区间内,最大的一定会排在最后)

第一趟冒泡

i i+1

3 5 1 4 2

3 1 5 4 2

3 1 4 5 2

3 1 4 2 5

第二趟冒泡

3 1 4 2 5

1 3 4 2 5

1 3 2 4 5

第三趟冒泡

1 3 2 4 5

1 2 3 4 5

第四趟冒泡

i i+1

1 2 3 4 5

冒泡排序

时间复杂度(取决于运算的次数):O(n^2)

空间复杂度(取决于额外开辟的空间):O(1)

稳定性:稳定

cpp 复制代码
void bubbleSort(int a[], int n) {
	//外层j控制的每次需要冒泡的长度(每趟过后都会排好一个,长度--)
	for (int j  = n  - 1; j  >= 1; j--) {
		//优化:当某一趟冒泡的时候已经有序,提前跳出循环
		bool flag  = true;//假设当前序列已经有序了
		//内层i遍历当前区间,进行冒泡操作(当前区间的最后一个元素一定会排好)
		for (int i  = 0; i  < j; i++) {
			if (a[i] > a[i  + 1]) {//冒泡操作(如果前者大于后者)
				swap(a[i], a[i  + 1]);//交换两个元素
				flag  = false;//证明此时序列可能还是无序的
			}
		}
		if (flag  == true) break;//证明此时序列是真的有序
	}
}
相关推荐
csuzhucong11 分钟前
一阶鬼魔魔方
算法
夏鹏今天学习了吗42 分钟前
【LeetCode热题100(73/100)】买卖股票的最佳时机
算法·leetcode·职场和发展
gaosushexiangji1 小时前
一项基于粒子图像测速(PIV)速度场反演的压力场重构技术
人工智能·算法
Voyager_41 小时前
算法学习记录17——力扣“股票系列题型”
学习·算法·leetcode
雨大王5121 小时前
汽车涂装工艺的智能化与绿色化升级:技术、案例与趋势
算法
XFF不秃头1 小时前
【力扣刷题笔记-在排序数组中查找元素的第一个和最后一个位置】
c++·笔记·算法·leetcode
hweiyu001 小时前
数据结构:布隆过滤器
数据结构
yoyo君~1 小时前
FAST-LIVO2 深度技术解析
算法·计算机视觉·机器人·无人机
我也要当昏君1 小时前
时间复杂度
算法·数学建模
超级大福宝1 小时前
C++ 中 unordered_map 的 at() 和 []
数据结构·c++