冒泡排序在c++中很常见,主要代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=n-1;i>0;i--){//循环n-1次,从第一个元素到倒数第二个元素
for(int j=0;j<i;j++){//遍历完成后,数据放在了最后一个位置
if(a[j]>a[j+1]){//有j+1个数组,所以不会出现不完整
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int i=0;i<n;i++)
cout<<a[i]<<' ';
return 0;
}
当然了,冒泡也有优化的写法,就是只要又一次没有进行数据交换,我们就直接打破循环。所以只要多定义一个bool变量。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
bool as;
for(int i=n-1;i>0;i--){//循环n-1次,从第一个元素到倒数第二个元素
as=0;//每一次循环设置初始状态
for(int j=0;j<i;j++){//遍历完成后,数据放在了最后一个位置
if(a[j]>a[j+1]){//有j+1个数组,所以不会出现不完整
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
as=1;
}
}
if(!as)break;//没有进行数据交换,就退出
}
for(int i=0;i<n;i++)
cout<<a[i]<<' ';
return 0;
}