双向冒泡排序。

代码

#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;
}

实验结果

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~