猴子排序

猴子排序-------O(n)

一、定义
猴子本身不易驯服,多动、爱玩和调皮,猴子排序精髓就在一个字,所以我们只需要对需要排序的数组进行"随心所欲"的乱排序即可.

二、实现
1.待排序的数组arr.
2.保存已排序的数据的数组res.
3.辅助数组help用来记录arr的那个位置已经进行了使用.

代码:

import java.util.*;
public class 猴子排序 {

	public static void main(String[] args) {
		int[] arr = { 32, 21, 26, 27, 83, 22, 99 };
		int[] res = new int[arr.length]; //用來接受排序好的結果
		int cnt = 0;// 计算经过多少次乱排
		while (sort(arr,res) != 1) {
			cnt++;
		}
		System.out.println(cnt);
		System.out.println(Arrays.toString(res));
	}

	static int sort(int[] arr,int[] res) {
		int[] help = new int[arr.length];
		 
		Random rd = new Random();
		for (int i = 0; i < arr.length; i++) {
			while (true) {
				int num = rd.nextInt(arr.length) % arr.length; // 随机产生0-length-1的数
				if (help[num] == 0) { //没有访问过
					help[num] = 1;// 标记为1 表示已经访问
					res[i] = arr[num];//将没有访问的数按照顺序放入res中
					break;
				}
			}
		}
		//对res检查  看是否有序
		for (int i = 0; i < arr.length - 1; i++) {
			if (res[i] > res[i + 1])
				return 0;// 表示乱排序失败
		}
		// 当经过了以上,表示成功 返回1
		return 1;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值