基于猴子算法的排序

作案动机

前几周看了几个排序可视化的视频,突然心血来潮想手搓一个简单的猴子排序,便有了这篇随笔。

作案过程

猴子算法,最重要的是什么:随机。

其实这和插入排序差不多,都是找两个下标交换,但猴子排序随机找到两个下标不比较就交换。主要是随机数困扰了我很久,搜哪个网站都找不到合理可用的。于是我突然想起了我小学时写的《猜数》代码,其中就有能用的!!!(谁懂那一刻的救赎感。但是这份猜数源文件的汉语部分已经成乱码了,有机会我改改再发出来)。总之就是这样,具体还是看代码吧(虽然很简单)。

案发现场

报告长官,现场只发现了这段代码

#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个数的排序都输出不出来。

结余

完结撒花~

posted @ 2026-01-24 22:34  teto_cai  阅读(19)  评论(0)    收藏  举报