java

位置:IT落伍者 >> java >> 浏览文章

天才排序算法:睡眠排序


发布日期:2020年06月22日
 
天才排序算法:睡眠排序

今天看到一个帖子帖名叫《Genius sorting algorithm: Sleep sort》看过之后感觉虽然实用价值不高但挺受启发的帖上来给大家分享下

Man am I a genius Check out this sorting algorithm I just invented

朋友我真是个天才快来看看我刚发明的排序算法

#!/bin/bash

function f() {

sleep $

echo $

}

while [ n $ ]

do

f $ &

shift

done

wait

example usage:

/sleepsortbash

再帖几个其他常用版本以便擅长不同语言的朋友阅读

JAVA版

[java]

public class SleepSort {

public static void main(String[] args) {

int[] ints = {};

SortThread[] sortThreads = new SortThread[intslength];

for (int i = ; i < sortThreadslength; i++) {

sortThreads[i] = new SortThread(ints[i])

}

for (int i = ; i < sortThreadslength; i++) {

sortThreads[i]start()

}

}

}

class SortThread extends Thread{

int ms = ;

public SortThread(int ms){

thisms = ms;

}

public void run(){

try {

sleep(ms*+

} catch (InterruptedException e) {

// TODO Autogenerated catch block

eprintStackTrace()

}

Systemoutprintln(ms)

}

}

PHP版

[php]

<?php

$pids = array()

for ($i=; $i<$argc; $i++)

{

if (($pid = pcntl_fork()) ==

{

$sleep = intval($argv[$i])

sleep($sleep)

echo $sleep\n;

exit()

}

else if ($pid ==

{

die()

}

else

{

$pids[] = $pid;

}

}

foreach($pids as $pid)

pcntl_waitpid($pid $status)

?>

php sleepsortphp

JS版

[javascript]

// Javascript

function lazySort(list callback) {

var result = [];

listforEach(function(i) {

setTimeout(function() {

resultpush(i)

if(resultlength == listlength) {

callback(result)

}

} i)

})

}

lazySort([] alert)

Ruby版

[ruby]

ARGVeach { |e| fork { sleep(eto_f/ puts e } }

还有很多冷门语言版本感兴趣朋友可以点文后的链接

该贴有+回复我挑几个有趣的回复分享下

路人A:

Oh god it works

But I dont like to wait seconds to sort

春哥它居然能用但我不想用秒去排(

路人B:

If the difference between any two of the numbers is too small race conditions will fuck you up the ass

如果两个数之间的差距太小竞态条件就要爆你菊花了

路人C:

What about

/sleepsort ?

If you slept exp(n) instead of n it could easily include negative integers too!

怎么办?如果你睡exp(n)而不是n它就能包含负数了

路人D:

Someone email this to Knuth

你可以给Knuth发邮件了

路人E:

I think thats brilliant :)

Would be fun to design a hardware sorter based on this

这招挺高可以根据这个设计一个硬件排序器

路人F:

This has a best case O(n) and an infinity high worst case (because its (n * Constant) and the constant could be much greater than n)

它有一个最好的O(n)的时间复杂度和一个无穷大的最坏复杂度因为这个常数可能比n大的多的多

路人G:

I heartily disagree with all the attempts to downplay the brilliance of the sleep sort algorithm Many of you have missed the important point that while traditional sorting algorithms can only utilize one core sleep sort has the capacity to use the full power of a massively parallel execution environment

Given that you need nearly no computing in each of the threads you can implement them using lowpower CPUs so this is in fact a GREEN COMPUTING algorithm

Oh and did I mention that the algorithm can also run inside a cloud…?

Sure youre a genius!

我由衷的不同意那些低估sleepsort这个天才算法的举动许多人可能忽略了一个重点那就是传统的排序只能利用一个核心而sleepsort有这个能力充分利用可以做大量并行计算的环境

在每个线程中给出你几乎不需要计算的部分你可以用低性能CPU搞定它们所以事实上这是一个绿色计算算法

还有我提到的这个方法能在云端运行不?

总之你是个天才!

路人H:

pretty fucking cool

太TMD的cool了!

               

上一篇:使用emacs-jde进行Java开发

下一篇:java开发中常常遇到的内存溢出问题 OutOfMemory