C式猴子排序(Monkey sorting)

目录

一:猴子排序的介绍

 二:功能实现

1:设置随机性

2:实现排序

三:完整实现代码

尾声:

一:猴子排序的介绍

       猴子排序(也被戏称为瞎子排序、波加排序或随机排序)是一种非常低效的排序算法,通常用作教学和娱乐目的,而不是实际的编程应用。 这种算法的基本思想是通过随机打乱数组直到数组有序为止。 猴子排序的名称来源于无限猴子定理,该定理指出一个猴子随机地敲击键盘的键无限长的时间,最终几乎必然能够打出任何给定的文本,比如莎士比亚的全套作品。

 二:功能实现

  1:设置随机性

        Monkey敲键盘那肯定是随便敲嘛,那就是说明具有随机性。所以我们应该在main函数里面加上一个随机种子,推荐以当前系统时间来设置,代码如下:

srand(time(NULL));

  2:实现排序

       关于如何实现,我们可以写三个自定义函数:PanDMonkey_SortKaiS。他们的作用是:循环调用判断,判断是否排序成功,随机排序。代码如下:

//检查是否排序成功
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)的全部介绍了,该排序可以说是最快的一种排序,也能称为最慢的一种排序,总而言之言而总之就是看你自己的运气啦!运气好,可能一次就成功,运气差呢,可能就一两天甚至一两个月吧~ 

       感谢您的阅读,希望我的博客不仅为您带来了新的视角,也激起了您心中那份对未知世界的好奇。如果您在阅读中找到了共鸣,或是获得了灵感,那将是我莫大的荣幸。感谢您的陪伴,让我们在下一次的相遇中继续这场美妙的探索之旅。祝您拥有一个愉快的一天,期待与您共享更多精彩故事!(๑✧◡✧๑)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值