¿Qué es el tipo de sueño?

Sleep sort es un algoritmo de clasificación de broma que se hizo popular en la placa 4chan / prog / [1]. El pseudocódigo para ordenar por sueño es:

  procedimiento printNumber (n)
     dormir en segundos
     imprimir n
 fin

 para arg en args
     ejecuta printNumber (arg) en el fondo
 fin
 esperar a que terminen todos los procesos

¡Jaja! Hilarante .

En otras palabras, lo que hace es que el tipo dormir genera un proceso para cada argumento. Cada proceso espera n segundos, luego imprime n , lo que significa que demora 1 segundo para imprimir “1”, 2 segundos para imprimir “2”, 100 segundos para imprimir “100”. Esto significa que, en su mayor parte, los números se imprimen en el orden de su tamaño, por lo tanto “ordenando” los argumentos.

La complejidad de este algoritmo en un mundo perfecto es O(max(args)) , ya que tomará max(args) segundos para imprimir el arg más grande. En realidad, la complejidad es O(n^2 + max(args)) , porque mantener múltiples procesos en segundo plano depende del sistema operativo para gestionar el cambio de contexto y la priorización de los procesos, por lo que el algoritmo básicamente subcontrata la clasificación real al núcleo.

También tenga en cuenta que no hay garantías de que la salida del género sea realmente correcta, una característica que la mayoría de los otros algoritmos de clasificación no tienen.

[1] http://dis.4chan.org/read/prog/1…

Solo por diversión, hay implementación en Erlang

  ordenar (L) ->
     Parent = self (),
     [spawn_link (fun () -> receive after X * 10 -> Parent! X end end) ||  X <- L],
     [recibir X -> X final ||  _ <- L]. 

Que se puede escribir muy bien como una expresión en el shell Erlang también

  [recibir X -> X final
   ||  _ <- [spawn_link (fun () -> receive after X * 10 -> P! X end end)
             ||  P <- [self ()], X <- L]]. 

explicación ya se ha dado en otras respuestas
En JavaScript sería

  [1,4,6,3,7,9] .forEach (función (n) {
 setTimeout ("console.log (" + n + ")", n);
 });