双向冒泡排序。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 2001
int main()
{
int n,i,j,k;
scanf("%d",&n);
bool flag=false;
long long a[N]={0};
for(i = 0;i < n;i ++){
scanf("%lld",&a[i]);
}
for(i = 0;i < n-1;i ++){
for(j = i;j < n-1-i;j ++){
if(a[j] > a[j+1]){
swap(a[j],a[j+1]);
flag=true;
}
if(!flag){
break;
}
}
for(k=n-i-1;k>0;k--){
if(a[k] < a[k-1]){
swap(a[k],a[k-1]);
flag=true;
}
if(!flag){
break;
}
}
}
if(!flag){
printf("NO\n");
}
else{
printf("YES\n");
for(i = 0;i < n;i++){
printf("%lld",a[i]);
if(i!=n-1)
printf(" ");
}
printf("\n");
}
return 0;
}
实验结果
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~