数据结构(8.3_1)——冒泡排序

交换排序:

冒泡排序和快速排序

冒泡排序:

示例:

从行往前将A[i-1]和A[i]比较若遇到A[i-1]>A[i]则将两个元素交换

注意:

代码实现:

cs 复制代码
//交换
void swap(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
}
//冒泡排序
void BubbleSort(int A[], int n) {
	for (int i = 0; i < n - 1; i++) {
		bool flag = false;		//表示本趟冒泡是否发生交换的标志
		for (int j = n - 1; j > i; j--)		//一趟冒泡过程
			if (A[j - 1] > A[j]) { //若为逆序
				swap(A[j - 1], A[j]);//交换
				flag = true;
			}
		if (flag == false)
			return;			//本趟遍历后没有发生交换,说明表已经有序
	}
}

算法性能分析

空间复杂度:O(1)

最好情况(有序):

最坏情况(逆序):

平均时间复杂度=O(n^2)

每次交换都需要移动元素3次

稳定性:稳定

冒泡排序适用于顺序存储和链式存储的线性表

总结:

相关推荐
WBluuue9 小时前
数据结构和算法:Morris遍历
数据结构·c++·算法
客梦9 小时前
数据结构-红黑树
数据结构·笔记
scx201310049 小时前
20251117Manacher总结
算法·manacher
(●—●)橘子……9 小时前
记力扣42.接雨水 练习理解
笔记·学习·算法·leetcode·职场和发展
旺仔小拳头..10 小时前
数据结构(三)----树/二叉树/完全二叉树/线索二叉树/哈夫曼树/树、二叉树、森林之间的转换/前 中 后序遍历
算法
Sheep Shaun10 小时前
STL:string和vector
开发语言·数据结构·c++·算法·leetcode
winfield82110 小时前
滑动时间窗口,找一段区间中的最大值
数据结构·算法
小徐Chao努力10 小时前
Go语言核心知识点底层原理教程【Slice的底层实现】
开发语言·算法·golang
赫凯11 小时前
【强化学习】第三章 马尔可夫决策过程
python·算法
资生算法程序员_畅想家_剑魔11 小时前
算法-动态规划-13
算法·动态规划