今天在小灰前辈那看了的三个排序算法哈哈哈哈哈秀到我了
睡眠排序
哈哈哈哈哈哈哈哈哈隔天秀来了
方法
对于一组数,每一个数都创建一个线程,线程刚创建就让其sleep
,sleep
时间长度为数的值,醒来的先后顺序就是从小到大的排序
代码
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);
}
缺点
-
启动过多线程大量消耗资源
-
由于时间延迟,数值相差小的值不一定能按顺序排出
-
数值过大就只能和程序比命长
-
面试官有可能会打你
猴子排序
猴子和打字机理论
一只猴子在打字机上胡乱打字,虽然打出来的字是无规律的,但是只要时间无限长,猴子总会有一天凑巧打出一部莎士比亚的著作
猴子排序
将给出的数组随机排列,每次排列结束后都验证数组是否有序
如果有序就结束,无序就继续随机排列,总有一次的随机排列是有序的
图解
原始数组
第一次随机排列
第二次随机排列
:
:
第N次随机排列
珠排序
原理
见过算盘的人都知道算盘上由许多珠子在细杆上,就像下图
把算盘竖起来的话珠子就会滑下来
这里有个很神奇的细节,如果统计每一横排珠子的数量,下落后每一排珠子数量正好是下落前珠子数量的升序排列
使用原理来模拟排序
我们可以使用算盘的原理来模拟排序
用二维数组模拟算盘
假设有一原始数组,把原始数组中的每一个数拆成很多个1
,放入算盘中
接下来模拟”竖起算盘珠子下落“的结果,把各列把自己列的1
相加化为一维数组
得到的结果就是排序完成的数组