排序算法猴子排序java算法代码实现

 

 

猴子排序

原理:现有一组未排序数据和相同数量的方格,然后依次随机地取出数据随机地放入方格中,直到把方格放满即止。

之所以又被称为猴子排序,我的猜测是因为。将这种随机的特性利用猴子来形容,毕竟猴子并不懂数的大小,让猴子选择和放置数据肯定就是随机的了!

是不是觉得很无语呢,这尼玛也是排序。不过再看其实它还是能达到我们想要的排序效果的,虽然概率很小(数据比较多的时候)。既然能解决问题,被称为方法也是无可厚非。

这个真实的含义就是把一个无序的数组进行乱排序,然后看其是否会有序,这是个概率性事件,有可能一次之后就有序了,也有可能很多次后依然无序。

排序算法猴子排序java算法代码实现_第1张图片

下面是Java代码

package hs;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 *  
 * 
 * @ClassName: MonkeySort 
 * @Description: 经典排序算法猴子排序
 * @author jiangya
 * @date 2019年1月10日 下午4:25:36    
 */
public class MonkeySort {
	public static void main(String[] args) {
		List arr = new ArrayList();// 建一个无序的数组
		arr.add(2);
		arr.add(5);
		arr.add(3);
		arr.add(8);
		arr.add(324);
		arr.add(22);
		arr.add(223);
		arr.add(636);
		arr.add(44);
		Long sum = 0L;
		Date sdate = new Date();
		SortThread sortThread = new SortThread(arr, sdate, sum);
		sortThread.run();
	}
}

// 排序线程
class SortThread extends Thread {
	List arr = null;
	Thread t = null;
	Date startDate = null;
	Long sum = 0L;

	public SortThread(List arr, Date startDate, Long sum) {
		this.arr = arr;
		this.startDate = startDate;
		this.sum = sum;
	}

	public void run() {
		Collections.shuffle(arr);// 随机打乱
		System.out.println(arr);
		for (int i = 0; i < arr.size() - 1; i++) {
			if (arr.get(i) < arr.get(i + 1)) {
				continue;
			} else {
				sum++;
				new SortThread(arr, startDate, sum).start();
				return;// 结束当前线程
			}

		}
		System.err.println("花了" + (new Date().getTime() - startDate.getTime()) + "ms时间,排序数组元素个数:" + arr.size() + ",共进行了"
				+ sum + "次");

	}
}

你可能感兴趣的:(java,排序,算法)