排序之冒泡排序

冒泡排序

原始思想

cpp 复制代码
bool bubble(int* arr, int lo, int hi)
{
	bool sorted = true;
	while (++lo < hi) {
		if (arr[lo - 1] > arr[lo]) {
			mySwap2(arr[lo - 1], arr[lo]);
			sorted = false;
		}
	}
	return sorted;
}
void bubbleSort(int* arr, int lo, int hi)
{
	while (!bubble(arr, lo, hi--));
}

[lo,hi),通过一个标志记录逆序的元素 ,该标志控制外层循环

改进

可以把原始数组看成无序的前缀和有序的后缀,一开始有序的后缀可能没有,为0,

在实际排序中可能会出现前缀有部分是有序的,不用进行排序,

cpp 复制代码
int bubblePlus(int* arr, int lo, int hi)
{
	int last = lo;
	while (++lo < hi) {
		if (arr[lo - 1] > arr[lo]) {
			last = lo;
			mySwap2(arr[lo - 1], arr[lo]);
		}
	}
	return last;
}
相关推荐
octopus_c几秒前
数据结构:二叉树
c语言·数据结构
PhotonixBay8 分钟前
从粗糙度到三维形貌:激光共聚焦显微镜实现微米级表面分析
图像处理·人工智能·测试工具·算法
2401_8628808219 分钟前
数据结构 --- 算法
数据结构·算法
ps酷教程26 分钟前
解析自定义数据
java
wuminyu28 分钟前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
个 人 练 习 生33 分钟前
数据结构链表:带头双向循环链表
c语言·数据结构·经验分享·学习·其他·链表
桦说编程36 分钟前
深入理解 FutureTask 状态机——从契约到实现
java·后端·性能优化
松仔log43 分钟前
Kotlin中级——协程
java·jvm·kotlin
血小板要健康2 小时前
二叉树 dfs 题型总结
算法·深度优先