冒泡排序
在Noip中,排序算法虽然不常考,但排序所涉及的思想在竞赛中是比较重要的。我们要输入一串数字,然后把它正确排序,从小到大或从大到小。冒泡排序是一个对新人特别友好的排序方法。它的时间复杂度是0(n^2)。
我们不妨脑补一下,一杯密度不均匀的物质会发生什么?密度小的气泡和液体会上浮,密度大的液体和固体会下沉。冒泡排序就是利用了这个方式。我们有一个数列a,数字a1,a2,a3,a4属于数列a,那么我从a1开始,如果a2比a1小,就交换a1和a2的值,再到a2的位置,此时a2是原a1和a2的较大值。我们再比较现在的a2和a3,较小的放在前面。在a4结束之后,判断数列是否有序,若无序则从a1继续原来的操作。这样,数值小的数就一个个像气泡一样冒到前面去了。
冒泡排序的最坏情况就是最小的数在数列的末尾,我们需要循环n(n为数列长)次这样的操作才能使数列完全有序,而每次循环需要遍历n个数字,所以我们的时间复杂度就是0(n^2)了。
那么接下来我把c++的实现代码放上来。
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int number[1000],n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>number[i];
}
while(true)//无限循环
{
bool a=0;
for(int i=1;i<n;i++)// 这里取i<n而不取i=n是因为我们不用遍历到最后一个数字
{
if(number[i]>number[i+1])//判断数列是否依然无序
{
a=1;
}
}
if(a==0)
{
break;//如果有序就结束循环
}
for(int i=1;i<n;i++)//这里取i<n而不取i=n是因为我们不用遍历到最后一个数字
{
if(number[i]>number[i+1])
{
swap(number[i],number[i+1]);//交换两个值
}
}
}
for(int i=1;i<=n;i++)
{
cout<<number[i]<<' ';
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人