基于猴子算法的排序
作案动机
前几周看了几个排序可视化的视频,突然心血来潮想手搓一个简单的猴子排序,便有了这篇随笔。
作案过程
猴子算法,最重要的是什么:随机。
其实这和插入排序差不多,都是找两个下标交换,但猴子排序随机找到两个下标不比较就交换。主要是随机数困扰了我很久,搜哪个网站都找不到合理可用的。于是我突然想起了我小学时写的《猜数》代码,其中就有能用的!!!(谁懂那一刻的救赎感。但是这份猜数源文件的汉语部分已经成乱码了,有机会我改改再发出来)。总之就是这样,具体还是看代码吧(虽然很简单)。
案发现场
报告长官,现场只发现了这段代码
#include<bits/stdc++.h>
using namespace std;
const long long N=2e5+10;
int a[N],b[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
a[i]=x;
b[i]=x;
}
bool flag=true;
sort(b+1,b+1+n);
for(int i=0;;i++)
{
for(int j=1;j<=n;j++)
{
if(a[j]!=b[i])
{
flag=0;
}
}
if(flag)
{
cout<<"本次猴子算法排序交换次数总计:"<<i-1<<"次";
return 0;
}
int l=rand()%n+1;
int r=rand()%n+1;
if(l==r)
{
continue;
}
swap(a[l],a[r]);
}
return 0;
cout<<"(╯°Д°)╯︵┻━┻ 我不会!";
return 0;
}
虽然只是理论可行,但实践总是连3个数的排序都输出不出来。
结余
完结撒花~

浙公网安备 33010602011771号