面向失业编程——睡眠排序和猴子排序

本文介绍了两种有趣的排序算法——睡眠排序和猴子排序。睡眠排序利用线程的睡眠时间进行排序,但易受误差影响且不适合大数据;猴子排序通过随机打乱数组期望达到排序,效率极低。虽然这两种算法在实际应用中并不适用,但它们提供了一种独特的思考角度。
摘要由CSDN通过智能技术生成

面向失业编程——睡眠排序和猴子排序

前言:

前几天看抖音的时候看到了比较有趣的算法,睡眠排序,紧接着发现这些沙雕排序比较好玩,然后又自己写了个猴子排序,让大家再面试的时候再也不用害怕啦(狗头保命)

排序算法一:睡眠排序
  • 睡眠排序是什么?
    • 睡眠排序利用的就是CPU的调度,使用Thread的sleep函数,给每一个值都加上一个线程,让该线程睡这个值的时间,那不就是你越大睡的越久,值越小越早醒,所以能起到排序的作用
  • 为什么有睡眠排序?
    • (可能觉得线程不用完,不得劲)
  • 睡眠排序的缺点
    • 若睡眠时间之间相差很小时,容易出现误差,为了减小误差,一般需要放大睡眠倍数;
    • 因为睡眠时间和数据大小有直接关系,因此数据不能太大 ,若数据很大时,睡眠时间要很久,程序运行时间很长;
    • 睡眠时间不能为负数,如果排序数据中存在负数,需要按照一定的规律把对应的睡眠时间转换成正数,比如说在设置睡眠时间时,把每一项都加上一个正数(该正数的绝对值要比最小负数的绝对值要大)
算法代码

	public class text_1 extends Thread {
    public static void main(String[] args) {
		ma();
    }

    public static void ma() {
        int[] num = new int[]{1, 3, 7, 5, 2, 4};
        for (int i : num) {
            new Thread(() -> {
                try {
                    Thread.sleep(i);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } //用lambda表达式提升一下B格
                System.out.println(i);
            }).start();
        }

    }
}
排序算法二:猴子排序
  • 猴子排序是什么
    • 让一群猴子在打印机前昼夜不停地敲打键盘,最终有可能能输入一部莎士比亚作品集——尽管概论微乎其微。同理,把一堆扑克牌扔到天上,等它们落下来的时候有概率会刚刚好从小到大排成一列。
    • 简单的来说,就是把要排列的数组随机打乱,总能有一种情况是排列好的情况
  • 缺点和优点
    • 优点:有一定的几率可以第一次就排序好
    • 缺点:随机性太大,耗时太长
算法代码

	public class monkey {
    public static void main(String[] args) {
        int[] num=new int[]{1,3,4,2,5,1};
        monkeysort(num);
        System.out.println(Arrays.toString(num));

    }
    public static void monkeysort(int[] nums)
    {
        map:while (true) {
            List<Integer> integers = Ints.asList(nums);//转为list集合

            Collections.shuffle(integers);//打乱数组,但是需要传入list集合
            int[] ints = Ints.toArray(integers);//转为数组
            //判断当前数组是否有序
            for (int i = 0; i < ints.length - 1; i++) {
                if (ints[i] > ints[i + 1]) {
                    continue map;//不正确重新打乱
                }

            }
            //如果有序了,将排序好的数组拷贝
            System.arraycopy(ints,0,nums,0,ints.length);
            break ;
        }

    }

	}

其中,我们需要用到array数组转list的函数,所以我们需要在maven中引入谷歌提供的guava工具类

	<dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>20.0</version>
    </dependency>

最终的输出结果为:
请添加图片描述
简直完美啊!

注意:这篇文章的算法看看就好!千万不要真的拿来用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值