排序之冒泡排序

冒泡排序

原始思想

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;
}
相关推荐
某不知名網友几秒前
C++ 深浅拷贝:从默认拷贝到 Rule of Five
java·开发语言
青山木4 分钟前
Hot 100 --- 划分字母区间
java·数据结构·算法·leetcode·贪心算法
Zzzzmo_7 分钟前
SpringBoot 配置文件
java·spring boot
君顾112 分钟前
外卖CPS小程序开发实战指南:从零到上线的完整流程
java·开发语言·外卖
無a伟12 分钟前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
Sunsets_Red21 分钟前
浅谈扫描线
c++·算法·编程·题解·洛谷·扫描线·信息学竞赛
流烟默22 分钟前
xxl-job 接入 Spring 的两种方式:手动装配与自动装配(含 initMethod 双启动踩坑实录)
java·spring·xxl-job
a1879272183123 分钟前
【算法】双指针与滑动窗口(一):框架总纲——三类问题、一个原理与判决书
算法·leetcode·区间·双指针·滑动窗口·原理·算法讲解
鹅城剑仙23 分钟前
Spring Boot 3 全局异常处理与统一响应封装进阶实战
java·spring boot·后端
shehuiyuelaiyuehao26 分钟前
算法42,模拟算法,模拟z字形变换
算法