蓝桥杯 冒泡排序

冒泡排序的思想

冒泡排序的思想是每次将最大的一下一下移动到最右边,然后将最右边这个确定下来。

再来确定第二大的,再确定第三大的...

对于数组a[n],具体来说,每次确定操作就是从左往右扫描,如果a[i]>a[i+1],我们将执行

swap(a[i],a[i+1])将两项交换,然后再往右检查,这样可以找出最大的并将其丢到最右边。

第一次确定操作是将a[1]~a[n]中最大的放到a[n];

第二次确定操作是将a[1]~a[n-1]中最大的放到a[n-1]。

依次类推(类似地,如果你想先把最小的放到左边也是可以的) 时间复杂度为O(2^n)。

由于排序过程中,数字像冒泡泡一样从左往右换过去,故名冒泡排序。

冒泡排序的实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+9;
int a[N]; 
int main()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	
	//i表示当前要确定的位置
	for(int i=n;i>=1;i--){
		
		//j从左往右扫
		for(int j=1;j<=i-1;j++){
			if(a[j]>a[j+1])swap(a[j],a[j+1]);
		} 
	} 
	//输出
	for(int i=1;i<=n;i++)cout<<a[i]<<" \n"[i==n];
	return 0; 
}

例题讲解

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+9;
int a[N]; 
int main()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=n;i>=1;i--){
		for(int j=1;j<=i-1;j++){
			if(a[j]>a[j+1])swap(a[j],a[j+1]);
		} 
	} 
	for(int i=1;i<=n;i++)cout<<a[i]<<" \n"[i==n];
	return 0; 
}
相关推荐
罗湖老棍子24 分钟前
花神游历各国(信息学奥赛一本通- P1550)(洛谷-P4145)
数据结构·算法·线段树·势能数·区间开平方根 区间查询
Mr_Xuhhh26 分钟前
LeetCode 热题 100 刷题笔记:数组与排列的经典解法(续)
算法·leetcode·职场和发展
qq_2837200542 分钟前
C++ 基础:STL 原理介绍 + 实用技巧
c++·stl·c·模板库
量子炒饭大师44 分钟前
【C++模板进阶】——【非类型模板参数 / 模板的特化 / 模板分离编译】
开发语言·c++·dubbo·模板·非类型模板·模板的特化·模板分离编译
炽烈小老头1 小时前
【每天学习一点算法 2026/03/29】搜索二维矩阵 II
学习·算法·矩阵
靴子学长1 小时前
Qwen3.5 架构手撕源码
算法·架构·大模型
寒月小酒1 小时前
3.28 OJ
算法
白藏y1 小时前
【脚手架】Protobuf基础使用
c++·protobuf
寒秋花开曾相惜1 小时前
(学习笔记)3.8 指针运算(3.8.5 变长数组)
java·c语言·开发语言·笔记·学习
打瞌睡的朱尤1 小时前
3.25蓝桥杯训练
职场和发展·蓝桥杯