长见识了!世界上最慢的排序算法!

史上最慢排序算法:猴子排序详解与应用
本文解析了猴子排序,一种看似缓慢但有趣的排序算法,其核心是随机打乱并判断是否有序。讨论了其应用场景及理论上的时间复杂度。别忘了,它主要作为学术探讨和教学材料,而非实际使用场景。

前段时间,分享了《算法导论》中的一些排序算法。

最美排序:

世界上最美的排序算法!

时间复杂度为O(n)的三种排序:

这个排序酷,O(n)

这个排序靓,O(n)

这个排序跩,O(n)

今天,和大家分享一个,世界上最慢的排序算法,猴子排序(bogo sort)。

话不多说,先上伪代码:

int bogo_sort(int& arr[], int n){

        while(false== is_sorted(arr[n])){

                random_shuffle(arr[n]);

        }

        return 0;

}

之所以叫猴子排序,源自典故:一只猴子随机敲击键盘,只要时间足够久,一定能敲出莎士比亚的诗。

看了伪代码,很容易理解其核心思路是:

(1)判断待排序的数组是否有序,有序则返回排序完毕;

(2)无序,则随机打乱数组;

(3)重复(1);

只要执行的时间足够长随机的次数足够久,总能够得到排序后的结果,它号称是世界上最慢的排序算法。

那么问题来了,这个排序有什么用呢?

我能够想到的,就是大学里作为算法课的时间复杂度推导习题,或者面试过程中时间复杂度计算考题了,又或者装13的谈资了,其他好像没有什么用。

那这个排序算法的时间复杂度是多少呢?

简单来分析一下。

n个元素随机打乱,有n!种组合。

一次排序成功的概率是p1 = 1/n!,一次排序失败的概率是p2 = 1-p1;

两次排序成功的概率是p2*p1;

画外音:第1次失败,第2次成功。

三次排序成功的概率是p2^2*p1;

画外音:前2次失败,第3次成功。

k次排序成功的概率是p2^(k-1)*p1

画外音:前k-1次失败,第k次成功。

于是,平均排序成功次数的期望

E(X) =

1次 * 一次成功的概率

+

2次 * 二次成功的概率

+

3次 * 三次成功的概率

+

+

k次 * k次成功的概率

+

即:

5bf3b2214dd3f20ddce6fd8393bb92fc.png

最后,根据大家大学里学的无穷级数的数学知识,“很容易”得到,其时间复杂度O(n*n!),这是一个阶乘级别的算法。

架构师之路-分享可落地的技术文章

答应我,装13可以,不要用这个考题去为难候选人,好么?谢谢大家!

调研

你还见过更奇葩的排序算法吗?

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值