前言
博主今天跟大家聊一聊睡眠排序,皮一下很开心!
没听过睡眠排序?不要觉得丢脸,我也是刚知道的!
说起排序,大家肯定只知道快排,冒泡排序等!然而今天看到一种睡眠排序,简直是颠覆三观,毁天灭地,确实是达到排序的目的了!而且思路清奇,着实可以拿出来分享分享!
睡眠排序
假设,入参是一个乱序的数组!
那如何进行排序输出呢?步骤如下:
- step1 循环数组
- step2 取出整数20,将整数传入线程,new一个线程,不启动线程,先把线程存到一个线程数组里
- step3 取出整数30,同上。取出整数10,同上。
- step4 循环线程数组,取出线程,启动线程,然后线程马上沉睡,沉睡时间为传入的整数。
- step5 睡眠10ms的线程最先醒来,输出整数10.睡眠20ms的线程其次醒来,输出整数20.睡眠30ms的线 程最后醒来,输出整数30.排序完毕!
接下来上代码,输入数组为int [] arr= {1,3,6,4,2,9,8,7,5},代码如下图所示
package com;
public class SleepTest{
public static void main(String[] args) {
int [] arr= {1,3,6,4,2,9,8,7,5};
// 创建指定长度的线程数组
SortThread[] sortThreads=new SortThread[arr.length];
// 指定每个线程数组的值
for (int i = 0; i < sortThreads.length; i++) {
sortThreads[i]=new SortThread(arr[i]);
}
// 开启每一个线程
for (int i = 0; i < sortThreads.length; i++) {
sortThreads[i].start();
}
}
}
class SortThread extends Thread{
int n=0;
public SortThread(int n) {
this.n=n;
}
@Override
public void run() {
try {
// 指定的睡眠时间
Thread.sleep(n*10+10);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.run();
// 输出该数字
System.out.println(n);
}
}
但是注意了,因为在本例中,1ms和2ms距离太接近了,可能出现如下输出:
这个问题好解决,只要沉睡时间,以传入整数*1000ms进行沉睡即可。
这个时候,就会有人又问了,如果要排序的数组有负数怎么办?难道你要
Thread.sleep(负数)
哈哈这里,显然是会报异常的!这种情况,只能将入参加上一定的偏移量,转换为正数进行处理!
总结
-
这种排序方式只可以用来借鉴一下!
-
皮一下很开心,天天皮天天开心哈哈哈哈哈!
-
更多参考精彩博文请看这里:陈永佳的博客
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97899.html