爱丁顿在1929年阐述过一个“无限猴子理论”,就是说“如果许多猴子任意敲打打字机键,最终可能会写出大英博物馆所有的书”。

书可以看作是字母的组合,大英博物馆所有的书作为有限集是包含在字母的组合这个无限集之中的。有限集在无限集中出现的概率不为零,这也是你说“概率肯定不为零”的原因。问题就在于“字母的组合”和“许多猴子任意敲打打字机键”两个无限集是否等价。

猴子排序引用了无限猴子定理,算法通过不停的随机排列数组,直到数组有序。

数组实现:package com.allen.testDemo;

import java.util.Arrays;

import java.util.Date;

import java.util.Random;

//猴子排序算法

public class BogoSort {

public static void main(String[] args) {

Integer[] arr = {45, 21, 67, 12, 57, 23, 68, 74, 90, 47};

Integer num = 0;

Date startDate = new Date();

System.out.println(Arrays.toString(arr));

while(!BogoSort.judgeSort(arr)){

num++;

BogoSort.upset(arr);

}

System.out.println("共执行了" + num + "次,消耗时间" + (new Date().getTime() - startDate.getTime()) + "ms");

System.out.println(Arrays.toString(arr));

}

//随机打乱数组

public static Integer[] upset(Integer[] arr){

Random rand = new Random();

Integer tmp = null;

for(int i = 0; i

//遍历到位置右侧未排序数组随机一个下标的值与左侧交换

Integer randNum = rand.nextInt(arr.length - i) + i;

tmp = arr[randNum];

arr[randNum] = arr[i];

arr[i] = tmp;

}

System.out.println(Arrays.toString(arr));

return arr;

}

//判断数组是否正序排列

public static boolean judgeSort(Integer[] arr){

for(int i = 0; i

if(arr[i] >= arr[i + 1]){

return false;

}

}

return true;

}

}

list实现:package com.allen.testDemo;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Date;

import java.util.List;

public class MonkeySort {

public static void main(String[] args) {

List list = new ArrayList<>();

list.add(45);

list.add(21);

list.add(67);

list.add(12);

list.add(23);

list.add(68);

list.add(74);

list.add(90);

list.add(47);

System.out.println(list.toString());

Integer num = 0;

Date startDate = new Date();

while(!MonkeySort.judgeSort(list)){

num++;

Collections.shuffle(list);

System.out.println(list.toString());

}

System.out.println("共执行了" + num + "次,消耗时间" + (new Date().getTime() - startDate.getTime()) + "ms");

System.out.println(list.toString());

}

public static boolean judgeSort(List list){

for(int i = 0; i

if(list.get(i) >= list.get(i + 1)){

return false;

}

}

return true;

}

}

这个算法大家拿来娱乐一下就好,毕竟这个效率真的是“太高了”。

java实现猴子排序_java实现猴子排序(BogoSort)相关推荐

  1. java冒泡排序函数验证_java冒泡排序-选择排序-插入排序-使用API中文文档直接调用函数...

    import java.util.Arrays; public class ArrayDemo2_3 { public static void main(String []args) { //---- ...

  2. java冒泡排序程序流图_java实现选择排序和冒泡排序及执行流程图解

    1. 选择排序:把第一个数与他后面的数进行比较,如果顺序则继续与后面比较,如果逆序则两数交换位置,继续将第一个数与交换位置后的数进行比较,这样就完成了第一轮排序.同理将第二位与其后的数比较,直到数组有 ...

  3. java系统排序_Java实现二进制排序树

    在计算机科学中,树是非常重要的数据结构二叉排序树是树的一种特殊情况二叉排序树是,它的每个节点只能有两个子节点,左子树的节点小于其父节点,右子树中的节点大于其父节点. 父节点二进制排序树在搜索中使用非常 ...

  4. java collections.sort 忽略大小写排序_Java Spring Mongo排序忽略大小写问题

    我正在使用Spring-Data-mongodb对MongoDB执行各种请求. 尝试执行分页&时用忽略的情况排序我得到一个例外, 这是我的代码: Sort.Order order = new ...

  5. java中集合的排序_Java中集合排序的两种方法

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  6. java实现数组排序代码_Java使用选择排序法对数组排序实现代码

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...

  7. java怎么给list集合排序_java list集合排序按某一属性排序操作

    我就废话不多说了,大家还是直接看代码吧~ public List sortList(List list){ Collections.sort(list, new Comparator(){ @Over ...

  8. java mongo忽略大小写_Java Spring Mongo排序忽略大小写问题

    我正在使用Spring-Data-mongodb对MongoDB执行各种请求. 当尝试使用忽略大小写执行分页和排序时,出现异常, 这是我的代码: Sort.Order order = new Sort ...

  9. arraylist java 排序_java的arraylist排序示例(arraylist用法)

    写了一个java数组排序示例,这里分享给大家共同学习 package com.yonyou.test; import java.util.ArrayList; import java.util.Col ...

  10. java treeset排序_java TreeSet的排序之自然排序

    TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合里的元素按升序排列.此时需要排序元素的类必须实现Compareble接口,并覆写其int com ...

最新文章

  1. Linux C SQLite3 编程
  2. iptables 网址转译 (Network Address Translation,NAT)
  3. 用JAVA日志来写诗
  4. Pyqt5 多标签_ESL电子货架标签方案
  5. Python面向对象(三)
  6. 列名无效如何解决_XSKY ClickHouse如何实现存算分离
  7. 如何有效维护PDH光端机的常见故障?
  8. 简述ipython的特点 app_介绍、基本语法、流程控制
  9. Django模板:过滤器
  10. ssis导入xml_SSIS包中的XML任务概述
  11. java excel模板中列表_java中自定义excel模板并且填充内容
  12. 搜狗站群代码之搜狗批量推送工具
  13. 怎么找到电脑的打印机
  14. 【Linux】虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…
  15. 精品微信小程序校园第二课堂在线学习网+后台系统|前后分离VUE
  16. 【matplotlib】21.多图合并【python3、numpy、pandas、matplotlib完结】
  17. douyin_xl,xa,xg,xk
  18. dlum1085-打表
  19. 80款FLASH小游戏合辑,附Flash播放器 | Yongd's Blognbsp;nbsp;分享网络好资源
  20. (17)-- 网页的foot制作

热门文章

  1. 集成第三方单点登录JIRA(Colfluence同理)
  2. 向中级程序员进击之路
  3. 老梁说天下——慈善的红与黑
  4. 阿里技术专家:一文教你高效画出技术架构图
  5. 实施不良资产证券化 信用评级不能少
  6. (2)msp430f5529 官方例程
  7. 【Android】canScrollVertically和canScrollHorizontally
  8. 北斗导航 | EagleEye2000:国产激光雷达走进测绘世界
  9. Guarded Suspension Pattern
  10. 在ASF中使用On Demand生产DEM等产品时使用不同参考DEM的区别