排序-睡眠排序

发布时间:2024年01月24日

睡眠排序

小故事:


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

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

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

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

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

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

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

代码示例

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;
        }
    }
文章来源:https://blog.csdn.net/m0_62649352/article/details/135825655
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。