此排序和之前介绍的三种排序没有任何关系,只是单纯在整理排序算法突然想到曾经看到过关于此排序的描述,现在总结一下。
之前三种排序的传送门开一下:
冒泡排序:
Java排序算法——冒泡排序(Bubble Sort)https://blog.csdn.net/babbfqb93/article/details/123005968简单选择排序:
Java排序算法——选择排序(Selection Sort)https://blog.csdn.net/babbfqb93/article/details/123040023
直接插入排序:
Java排序算法——插入排序(Insertion Sort)https://blog.csdn.net/babbfqb93/article/details/123043711引用一下百度百科——无限猴子理论
爱丁顿在1929年阐述过一个“无限猴子理论”,就是说“如果许多猴子任意敲打打字机键,最终可能会写出大英博物馆所有的书”。
所以,算法中也存在这样的一种排序算法,猴子排序...
简单地说就是随便乱排,代码实现:
public static void bogoSort(int[] iArray){
Random r = new Random();
int num = 0;
while(true) {
System.out.println("正在执行第"+(++num)+"次排序");
System.out.println("排序之前:"+ Arrays.toString(iArray));
for (int i = 0; i < iArray.length; i++) {
swap(iArray, i, r.nextInt(iArray.length));
}
if(isSorted(iArray)){
System.out.println("排序成功");
System.out.println("排序之后:"+ Arrays.toString(iArray));
return;
}
}
}
判断是否成功的代码:
public static boolean isSorted(int[] iArrays) {
for (int i = 0; i < iArrays.length - 1; i++) {
if(iArrays[i]>iArrays[i+1]){
return false;
}
}
return true;
}
交换和随机生成逻辑代码:
//初始换一个长度为参数的随机数组,数组元素为0(含)到50(不含)的随机数
public static int[] initArray(int length){
Random r = new Random();//申明并实例化一个Random对象
int[] iArray = new int[length];//申明并实例化一个int数组用于测试排序
for (int i = 0; i < iArray.length; i++) {
//通过Random随机生成一个0(含)到50(不含)的数并插入对应位置
iArray[i] = r.nextInt(50);
}
return iArray;
}
//交换
public static void swap(int[] iArray,int i,int j){
int tmp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = tmp;
}
最后主方法入口:
public static void main(String[] args) {
int[] iArrays = initArray(5);
bogoSort(iArrays);
}
实现结果...
嗯,就是一个随机排序,纯粹看脸,大家也戏称为“欧皇排序”...
好,我说完了。