【Java】睡眠排序
写这个东西的缘由
这是一个羞耻度爆表的排序,那天跟朋友开玩笑,能不能用线程休眠操纵排序,朋友楞了一下,说还真有。。。我傻了,突然想想好像真有,就是这个睡眠排序。
最后长叹一口气,设计者脑洞真大。。。
这是个神马玩意&&有何神奇之处
排序算法一般是力求兼顾时间和空间的平衡,而睡眠排序算法却像是一个玩笑,当时间和空间两者消耗足够大,才能达到最终“精确”排序的目的。
原理/基本思想是什么
基于根据CPU的调度算法实现。
我们要对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的10倍时间(ms)再加10,不是睡眠和它的数值一样大的原因是,当数值太小时,误差太大,睡眠的时间不比输出的时间少,那么就会存在不正确的输出结果。
(其实,我真的觉得容易出问题,因为你即使让线程结束了休眠,也不见得能立刻被执行。。。不好说哇)
实现原理
构造 n 个(n为待排序元素个数)线程(自定义),它们和这 n 个数一一对应。
初始化后,线程都按照指定的时间开始休眠,等休眠时间到了以后结束休眠,等被执行的时候输出它对应的数。
这样,最小的数对应的线程最早醒来,这个数最早被输出(理论上)。
等所有线程都结束休眠并被执行完成,排序就结束了。
实现代码(Java)
线程类的构建
/*** 玄学的开始——构造线程子类*/
public class SortThread extends Thread { //待排序的数private int data = 0; public SortThread(int data){ this.data = data; } @Overridepublic void run(){ try { //睡眠指定的时间为数值的10倍再加上10sleep(data * 10 + 10);} catch (InterruptedException e) { e.printStackTrace(); } //输出该数System.out.println(data); }
}
下面是弱智般的实现算法(前提是会写基本的多线程)。。。
public static int[] sort(int[] array) {//创建指定长度的线程数组SortThread[] threadList = new SortThread[array.length]; //指定线程数组中每个线程的值datafor (int i = 0; i < threadList.length; i++) { threadList[i] = new SortThread(arr[i]); } //开启每个线程for (SortThread thread : threadList) { thread.start(); }
}
吐槽
脑洞真大。。。。。。
时间复杂度是o(n),可是又怎样……
【Java】睡眠排序相关推荐
- Java三种多线程实现睡眠排序
原文链接:https://5hx.ink/?p=168 1.继承Thread类,重写run( )方法 2.实现Runnable接口,重写run( )方法 3.实现Callable接口,重写call( ...
- Java多线程排序--睡眠排序
Java多线程排序–睡眠排序 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public ...
- java多线程并发排序-睡眠排序大法
java多线程并发编程之创新排序法-睡眠排序大法,多线程并发排序使得排序效率更高 public class sleepSort {public static void main(String[] ar ...
- Java排序 - 不实用的几个排序算法 -- 睡眠排序、猴子排序、面条排序、珠排序...
介绍几个不实用的排序算法,一来可以在学习时增加一些乐趣,放松一下自己,二来可以学习一下.思考一下这些算法失败在哪里,又是否存在一些好的地方? 睡眠排序 这是一个思想比较简单,脑洞巨大的算法 -- 我们 ...
- 排序算法--睡眠排序
我们学数据结构的时候会学到多种排序算法,基本上都是基于比较的排序,下面的这个排序算法并不是基于比较,确切的说它是基于cpu调度算法实现的,这个算法的作者称之为--睡眠排序. 它的基本思想是,对一组数据 ...
- Scala - 睡眠排序应用与分析
一.引言 刷短视频看到有博主提到了睡眠排序这种排序方式,听了之后感觉很有意思,原文使用 java 进行编码,这里使用 scala 重新写一遍,顺带复习一下线程使用和线程安全相关的知识. 二.睡眠排序 ...
- Java常见排序算法
Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html
- Java第三大的数,Java通过排序找出数组第三大数字
Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...
- Java对象排序、中文排序、SortedSet排序使用和源码讲解
在C.C++中有很多排序算法,但是通常排序算法不得不让程序员在写代码的过程中陷入对底层很多指针和位置的理解,Java不希望这样,所以排序大多可以由java帮你做掉,例如,你要对一个数组排序,就通过:C ...
最新文章
- Appian宣布将Google AI 集成到RPA中
- 4.11-固件映像包 ( FIP:Firmware Image Package )简介
- 模拟计算机网络中的零比特填充
- 「 Modbus-RTU报文解析」解析03、06、10功能码报文示例
- shell编程之条件判断语句和流程控制语句
- 写个函数用来对二维数组排序
- Linux 10分钟让你掌握虚拟地址--写时拷贝技术
- 浏览器保存密码后文本框出现黄色背景的解决方案
- MySQL中常见的函数常见的问题
- 异常:java.lang.NoSuchMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext
- 计算机功能键盘使用方法,键盘的使用方法介绍 键盘上都有哪些功能按键
- 这5个优质动漫网站,能让你瞬间爆棚,都是满满的干货
- “专精特新”背后的京东动力
- Mysql定时任务,最简单例子
- ubuntu 更新系统源
- 2022安全员-C证试题模拟考试平台操作
- [我的作死案例]图书馆泡妹记 上
- 液晶电视面板市场现状及未来发展趋势
- java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件
- android edl模式,高通方案生成大包后,如何刷机