在计算机科学中,Bogo排序(bogo-sort)是个既不实用又原始的排序算法,其原理等同将一堆卡片抛起,落在桌上后检查卡片是否已整齐排列好,若非就再抛一次。其名字源自Quantum bogodynamics,又称bozo sort、blort sort或猴子排序(参见无限猴子定理)。
//qscqesze #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #include <sstream> #include <queue> #include <typeinfo> #include <fstream> #include <map> #include <stack> typedef long long ll; using namespace std; //freopen("D.in","r",stdin); //freopen("D.out","w",stdout); #define sspeed ios_base::sync_with_stdio(0);cin.tie(0) #define maxn 200001 #define mod 10007 #define eps 1e-9 //const int inf=0x7fffffff; //无限大 const int inf=0x3f3f3f3f; /* int buf[10]; inline void write(int i) { int p = 0;if(i == 0) p++; else while(i) {buf[p++] = i % 10;i /= 10;} for(int j = p-1; j >=0; j--) putchar('0' + buf[j]); printf(" "); } */ //************************************************************************************** inline ll read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int a[maxn]; int b[maxn]; int vis[maxn]; int n; int cnt=0; int main() { n=read(); for(int i=0;i<n;i++) a[i]=read(); while(1) { for(int i=0;i<n;i++) b[i]=a[i]; int flag=0; for(int i=0;i<n-1;i++) if(b[i]>b[i+1]) { flag=1; break; } if(!flag) break; cnt++; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) { while(1) { int k=rand()%n; if(vis[k]) continue; a[i]=b[k]; vis[k]=1; break; } } } cout<<cnt<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; }