Java(面试):面试?别再问我睡眠排序了!

前言


博主今天跟大家聊一聊睡眠排序,皮一下很开心!

没听过睡眠排序?不要觉得丢脸,我也是刚知道的!

说起排序,大家肯定只知道快排,冒泡排序等!然而今天看到一种睡眠排序,简直是颠覆三观,毁天灭地,确实是达到排序的目的了!而且思路清奇,着实可以拿出来分享分享!


睡眠排序

假设,入参是一个乱序的数组!
那如何进行排序输出呢?步骤如下:

  • 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);
	}
	
}

输出的结果:
Java(面试):面试?别再问我睡眠排序了!_第1张图片

但是注意了,因为在本例中,1ms和2ms距离太接近了,可能出现如下输出:
Java(面试):面试?别再问我睡眠排序了!_第2张图片
这个问题好解决,只要沉睡时间,以传入整数*1000ms进行沉睡即可。
这个时候,就会有人又问了,如果要排序的数组有负数怎么办?难道你要

Thread.sleep(负数)

哈哈这里,显然是会报异常的!这种情况,只能将入参加上一定的偏移量,转换为正数进行处理!

总结

  • 这种排序方式只可以用来借鉴一下!

  • 皮一下很开心,天天皮天天开心哈哈哈哈哈!

  • 更多参考精彩博文请看这里:陈永佳的博客

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

你可能感兴趣的:(杂记随笔系列,排序,面试)