目录
Bogo排序
无限猴子定理最早是由埃米尔·博雷尔在1909年出版的一本谈概率的书籍中提到的,此书中介绍了“打字的猴子”的概念。无限猴子定理是概率论中的柯尔莫哥洛夫的零一律的其中一个命题的例子。大概意思是,如果让一只猴子在打字机上随机地进行按键,如果一直不停的这样按下去,只要时间达到无穷时,这只猴子就几乎必然可以打出任何给定的文字,甚至是莎士比亚的全套著作也可以打出来。
加入我们把这个思想应用到排序上面呢,应该是一件很疯狂的事情。假设我们无限随机打乱这些数字,我们必定会在其中找到我们想要的结果。
public class Test1 {
public static void main(String[] args)
{
// int [] a ={1,2,3,4,5,6,7,8,9};
// Sheffid(a);
// for (int i = 0; i < a.length; i++) {
// System.out.println(a[i]);
int[] arr = { 9,8,7,6,5,4,3,2,1};
System.out.println("排序次数" + bogo(arr));
for (int i : arr) {
System.out.print(i + " ");
}
}
public static int bogo(int[] arr)
{
int count= 0;
while(!isOrder(arr))
{
Sheffid(arr);
count++;
}
return count;
}
// 判断是否有序
public static boolean isOrder(int [] arr)
{
for (int i = 1; i < arr.length; i++)
{
if(arr[i-1] > arr[i])
{
return false;
}
}
return true;
}
public static void Sheffid(int[] arr)
{
int temp;
for (int i = 0; i < arr.length ;i++) {
int j =(int)(Math.random()*arr.length);
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
// System.out.println("________________");
// System.out.println((int) (Math.random()*arr.length));
}
}
}
打擂台
public class Test3
{
public static void main(String[] args) {
int[] arr={1,1,1,3,3,3,2,22,3};
int n = majorityMethod(arr);
System.out.println(n);
}
public static int majorityMethod(int [] arr)
{
int count = 0;
int manyNum = 0;
for(int i:arr)
{
if(count==0){manyNum = i;}
count+=(i ==manyNum )?1: -1;
}
return manyNum;
}
}
//打擂台:当一个数的总量大于数组中数的一半是可以使用
//该数可以将其它数都”打败“最终的返回值就是结果