排序-睡眠排序

睡眠排序

小故事:


在一个神奇的小村庄里,村长有一群活泼可爱的小动物们,它们分别是兔子、松鼠、乌龟和蜗牛。每天晚上,村长都会安排一场特殊的比赛,让大家各自按照自己的速度去完成一项任务。

有一天,村长决定让他们按照年龄从小到大顺序排队,以便更好地照顾年幼的动物。但他又不想直接询问他们的年龄,于是他想出了一个有趣的办法。

他告诉每只动物:“今晚,你们每个人都按照自己年龄对应的小时数去睡觉。比如,如果你一岁,就睡一个小时再回来找我;两岁就睡两个小时,以此类推。”

夜幕降临,小动物们都纷纷回窝开始睡觉。首先,只有一岁的蜗牛很快就入睡并醒来,来到村长面前报到;接着,两岁的乌龟也按时醒来;然后是三岁的松鼠,最后是四岁的兔子。

就这样,随着夜晚的推进,小动物们按照年龄从小到大的顺序陆续回到了村长身边。村长看着眼前排列整齐的小动物队伍,满意地点了点头,感叹道:“原来这就是传说中的‘睡觉排序’啊!”

排序的使用一个思路,把每一个元素都进行睡眠,先醒的就是最小的,剩下的依次苏醒,最终达到排序效果。

在不考虑效率的情况下,也是满足了排序。只是作为一个思路,实际千万别用!

代码示例

public static void main(String[] args) throws ExecutionException, InterruptedException {
        int[] arrToSort = {3, 2, 5, 1, 4};
        ExecutorService executor = Executors.newFixedThreadPool(arrToSort.length);
        List<Future<Void>> futures = new ArrayList<>();

        for (int num : arrToSort) {
            futures.add(executor.submit(new SleepSortTask(num)));
        }

        // 关闭线程池,等待所有任务完成
        executor.shutdown();
        while (!executor.isTerminated()) {}

        // 输出结果
        for (Future<Void> future : futures) {
            // Future.get() 会阻塞直到任务完成
            future.get();
        }
    }

    static class SleepSortTask implements Callable<Void> {
        private final int number;

        public SleepSortTask(int number) {
            this.number = number;
        }

        @Override
        public Void call() {
            try {
                Thread.sleep(number * 1000L); // 假设睡眠时间单位为秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            System.out.println(number);
            return null;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值