蓝桥杯 冒泡排序

冒泡排序的思想

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

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

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

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

第一次确定操作是将a1~an中最大的放到an;

第二次确定操作是将a1~an-1中最大的放到an-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; 
}
相关推荐
从零开始的代码生活_3 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
泷寂4 小时前
最小生成树 (MST基础)
算法
Daniel_1234 小时前
数组——总结篇
算法
炸薯条!4 小时前
从零开始学C++ (内存管理)
java·jvm·c++
不懒不懒4 小时前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart4 小时前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法
会编程的小孩4 小时前
初识数据类型以及变量定义
数据结构·算法
Reart5 小时前
Leetcode 337.打家劫舍3(717)
后端·算法
梅梅绵绵冰5 小时前
数据结构-时间复杂度
数据结构·算法
遥感知识服务5 小时前
盐碱地、白屋顶和裸土都很亮,卫星怎样分清?
人工智能·算法·机器学习