三个奇葩的排序算法

在这里插入图片描述

今天在小灰前辈那看了的三个排序算法哈哈哈哈哈秀到我了

睡眠排序

哈哈哈哈哈哈哈哈哈隔天秀来了

方法

对于一组数,每一个数都创建一个线程,线程刚创建就让其sleepsleep时间长度为数的值,醒来的先后顺序就是从小到大的排序

在这里插入图片描述

代码

public static void sleepSort(int[] array){
    for (int num : array) {
        new Thread(() -> {
            try {
                Thread.sleep(num);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}


public static void main(String[] args) {
    int[] array = {9, 30, 34, 67, 112};
    sleepSort(array);
}

缺点

  • 启动过多线程大量消耗资源

  • 由于时间延迟,数值相差小的值不一定能按顺序排出

  • 数值过大就只能和程序比命长

  • 面试官有可能会打你

猴子排序

猴子和打字机理论

一只猴子在打字机上胡乱打字,虽然打出来的字是无规律的,但是只要时间无限长,猴子总会有一天凑巧打出一部莎士比亚的著作

猴子排序

将给出的数组随机排列,每次排列结束后都验证数组是否有序

扫描二维码关注公众号,回复: 9398670 查看本文章

如果有序就结束,无序就继续随机排列,总有一次的随机排列是有序的

图解

原始数组
在这里插入图片描述

第一次随机排列

在这里插入图片描述

第二次随机排列
在这里插入图片描述

第N次随机排列
在这里插入图片描述

珠排序

原理

见过算盘的人都知道算盘上由许多珠子在细杆上,就像下图

在这里插入图片描述

把算盘竖起来的话珠子就会滑下来

在这里插入图片描述

这里有个很神奇的细节,如果统计每一横排珠子的数量,下落后每一排珠子数量正好是下落前珠子数量的升序排列

使用原理来模拟排序

我们可以使用算盘的原理来模拟排序

用二维数组模拟算盘

假设有一原始数组,把原始数组中的每一个数拆成很多个1,放入算盘中

在这里插入图片描述

接下来模拟”竖起算盘珠子下落“的结果,把各列把自己列的1相加化为一维数组

得到的结果就是排序完成的数组

640-1575300352462


参考:程序员小灰-漫画:三种 “奇葩” 的排序算法

发布了52 篇原创文章 · 获赞 9 · 访问量 6249

猜你喜欢

转载自blog.csdn.net/weixin_43553694/article/details/104158454