排序算法:冒泡排序

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

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;//证明此时序列是真的有序
	}
}
相关推荐
Gofarlic_OMS5 分钟前
MATLAB许可证闲置自动检测与智能提醒
java·大数据·运维·开发语言·人工智能·算法·matlab
工业甲酰苯胺8 分钟前
推荐算法闲谈:如何在不同业务场景下理解和拆解核心指标
算法·机器学习·推荐算法
平生不喜凡桃李9 分钟前
LeetCode: 基本计算器详解
算法·leetcode·计算器·逆波兰表达式
haing201912 分钟前
卡尔曼滤波(Kalman Filter)原理
线性代数·算法·机器学习
Dev7z13 分钟前
基于深度学习的泳池溺水行为检测算法设计
人工智能·深度学习·算法
Pluchon16 分钟前
硅基计划4.0 算法 优先级队列
数据结构·算法·排序算法
Swift社区21 分钟前
LeetCode 375 - 猜数字大小 II
算法·leetcode·swift
sunfove22 分钟前
从“锯齿”到“光滑”:相位解包裹 (Phase Unwrapping) 算法深度解析
算法
DuHz30 分钟前
自动驾驶雷达干扰缓解:探索主动策略论文精读
论文阅读·人工智能·算法·机器学习·自动驾驶·汽车·信号处理
漫随流水32 分钟前
leetcode算法(257.二叉树的所有路径)
数据结构·算法·leetcode·二叉树