蓝桥杯 冒泡排序

冒泡排序的思想

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

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

对于数组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; 
}
相关推荐
8Qi87 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
888CC++9 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
(●—●)橘子……10 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科12 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
feng_you_ying_li12 小时前
C++复习二,继承与多态
c++
小小de风呀12 小时前
de风——【从零开始学C++】(十一):list的基本使用和模拟实现
开发语言·c++·list
KaMeidebaby12 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
陌路2013 小时前
C++高级进阶--夯实进阶基础(1)
开发语言·c++
无限码力13 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题