蓝桥杯 冒泡排序

冒泡排序的思想

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

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

对于数组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; 
}
相关推荐
9ilk8 小时前
【基于one-loop-per-thread的高并发服务器】--- 自主实现HttpServer
linux·运维·服务器·c++·笔记·后端
Kt&Rs9 小时前
11.9 LeetCode 题目汇总与解题思路
算法·leetcode
ゞ 正在缓冲99%…9 小时前
leetcode1547.切棍子的最小成本
数据结构·算法·leetcode·动态规划
海盗猫鸥9 小时前
「C++」vector的使用及接口模拟详解
开发语言·c++
2401_841495649 小时前
【LeetCode刷题】移动零
数据结构·python·算法·leetcode·数组·双指针法·移动零
开心星人10 小时前
Leetcode hot100 Java刷题(二)
java·算法·leetcode
liulilittle10 小时前
CPU亲和性深度实践:从基础原理到Intel大小核架构优化
c++·线程·进程·cpu·量化·高频·亲核性
hn小菜鸡10 小时前
LeetCode 153.寻找旋转排序数组中的最小值
数据结构·算法·leetcode
Albert Edison10 小时前
【项目设计】基于正倒排索引的Boost搜索引擎
linux·网络·c++·后端·http·搜索引擎
DeniuHe10 小时前
逻辑回归(Logistic Regression)详细解释与公式推导
算法·机器学习·逻辑回归