Bogo排序——延伸引发相反思索

最近想看看排序算法,按字母发音排序,我首先看到的是Bogo排序,Bogo排序作者本身不认为是好的排序算法,这是一种靠偶然性排序的算法,但是作为排序算法的一种,还是大体介绍下。

对于Bogo排序,很容易让我们想起一个场景,就是我们手中拿着一叠扑克牌,向上抛出,落在地上,我们期待落在地上的时候这些扑克牌是有序的,A-K(我试过没有一次成功,也许是人品问题吧),如果没有没排序好则继续抛,其实Bogo排序算法也是基于这种思想衍生出来的。

对于“向上抛”的过程中,我想不到更好的方法,想来想去还是借助随机数吧,Random类,我想大家都非常熟悉,

public static void shuffle(int[] n){
for(int i = 0 ; i < n.length ; i++){
int swapPosition = random.nextInt(i + 1);
int temp = n[i];
n[i] = n[swapPosition];
n[swapPosition] = temp;
}
}

和方法名一样,这个方法我暂且称之为洗牌,代码很简单,通过此方法可看出,整个洗牌(也就是实际上的排序过程)是建立在随机数的基础上,显然我不太相信这种随机事件能够发声在我的身上。我们可以看出这种排序算法的最长时间将是真无穷,我们不希望等待给几个数字排序到头发花白吧。作为了解,此种排序不宜在实际中应用。

通过这个排序算法,我们可以想象现实生活中有些时候需要我们去打乱一些顺序,举个例子,我们的客户流水都是按时间点先后有序存到数据库里面的,我们需要在某天发放奖品,奖品得主应该是充分具备随机性,这时候我们需要无序,这时候,我们向来想去,用什么来打乱这种时间顺序好呢,不如用Bogo排序算法吧,我想这个方法来一次,顺序肯定被打的乱七八糟了,当然这只是笔者的一种刻意想象,学习计算机乐趣就在其中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值