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

3 篇文章 0 订阅
1 篇文章 0 订阅

 

 

<h1>猴子排序</h1>

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

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

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

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

下面是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<Integer> arr = new ArrayList<Integer>();// 建一个无序的数组
		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<Integer> arr = null;
	Thread t = null;
	Date startDate = null;
	Long sum = 0L;

	public SortThread(List<Integer> 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 + "次");

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值