目录
一:猴子排序的介绍
猴子排序(也被戏称为瞎子排序、波加排序或随机排序)是一种非常低效的排序算法,通常用作教学和娱乐目的,而不是实际的编程应用。 这种算法的基本思想是通过随机打乱数组直到数组有序为止。 猴子排序的名称来源于无限猴子定理,该定理指出一个猴子随机地敲击键盘的键无限长的时间,最终几乎必然能够打出任何给定的文本,比如莎士比亚的全套作品。
二:功能实现
1:设置随机性
Monkey敲键盘那肯定是随便敲嘛,那就是说明具有随机性。所以我们应该在main函数里面加上一个随机种子,推荐以当前系统时间来设置,代码如下:
srand(time(NULL));
2:实现排序
关于如何实现,我们可以写三个自定义函数:PanD,Monkey_Sort,KaiS。他们的作用是:循环调用判断,判断是否排序成功,随机排序。代码如下:
//检查是否排序成功
int Monkey_Sort(int arr[], int x)
{
for (int i = 0; i < x - 1; i++)
{
if (arr[i] > arr[i + 1]) //如果要降序则可以把>改为<
return 0;
}
return 1; //排序完成就返回真值
}
//随机排序
void KaiS(int arr[], int x)
{
for (int i = 0; i < x; i++)
{
int j = rand() % x; //用随机函数取该数组大小的模来实现随机交换
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
//持续调用判断函数
void PanD(int arr[], int x)
{
while (!Monkey_Sort(arr, x))
{
KaiS(arr, x);
}
}
三:完整实现代码
既然我们已经知道要实现那些功能,如何实现了后,那就不多bb,上代码吧!
#include "stdio.h"
#include "time.h"
#include "windows.h"
#define SZ 5 //数组大小设置
int count = 0;
int Monkey_Sort(int arr[], int x)
{
for (int i = 0; i < x - 1; i++)
{
if (arr[i] > arr[i + 1])
return 0;
}
return 1;
}
void KaiS(int arr[], int x)
{
for (int i = 0; i < x; i++)
{
int j = rand() % x;
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
count++; //统计次数
}
void PanD(int arr[], int x)
{
while (!Monkey_Sort(arr, x))
{
KaiS(arr, x);
}
}
int main()
{
srand(time(NULL));
int num[SZ], size;
printf("请输入 %d 个数: ", SZ);
for (int i = 0; i < SZ; i++)
scanf("%d", &num[i]);
size = sizeof(num) / sizeof(num[0]); //通过sizeof函数计算数组大小
PanD(num, size); //只需要调用PanD函数,其余两个函数则嵌套实现
printf("排序后的结果为: ");
for (int i = 0; i < SZ; i++)
printf("%d ", num[i]);
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>> 总计: %d 次",count);
}
尾声:
上面所述的便是猴子排序(Monkey sorting)的全部介绍了,该排序可以说是最快的一种排序,也能称为最慢的一种排序,总而言之言而总之就是看你自己的运气啦!运气好,可能一次就成功,运气差呢,可能就一两天甚至一两个月吧~
感谢您的阅读,希望我的博客不仅为您带来了新的视角,也激起了您心中那份对未知世界的好奇。如果您在阅读中找到了共鸣,或是获得了灵感,那将是我莫大的荣幸。感谢您的陪伴,让我们在下一次的相遇中继续这场美妙的探索之旅。祝您拥有一个愉快的一天,期待与您共享更多精彩故事!(๑✧◡✧๑)