题面:
输入个整数,用冒泡排序算法将这
个数从小到大进行排序。
输入和输出同P0078
C++常见排序算法——冒泡排序算法_c++冒泡排序_冷漩的博客-CSDN博客
思路:
冒泡排序算法的原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
所以可以:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1001;
int a[maxn];
void bubble_sort(int a[],int n){
for(int i=1;i<n;i++){
for(int j=1;j<n;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
bubble_sort(a,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
但是写完觉得可以优化,也就是减少徒劳的循环,也就是:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1001;
int a[maxn];
void bubble_sort(int a[],int n){
for(int i=1;i<n;i++){
bool flag=true;
for(int j=1;j<n;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
flag=false;
}
}
if(flag){
break;
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
bubble_sort(a,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}