Sorting algorithms/Sleep sort: Difference between revisions

m
(Added assembly implementation)
 
(5 intermediate revisions by 4 users not shown)
Line 35:
 
=={{header|Assembly}}==
{{works with|flat assembler for 64-bit Linux x64}}
<syntaxhighlight lang="asm">
format ELF64 executable 3
entry start
 
; parameters: argc, argv[] on stack
start:
mov r12, [rsp] ; get argc
Line 103 ⟶ 104:
syscall
 
; parameter: rdi = string pointer
; return: rax = integer conversion
atoi_simple:
push rdi
Line 134 ⟶ 137:
ret ; return integer value
 
; parameter: rdi = string pointer
; return: rax = length
strlen_simple:
xor rax, rax
Line 553 ⟶ 558:
 
=={{header|Elena}}==
ELENA 56.0 :
<syntaxhighlight lang="elena">import extensions;
import system'routines;
Line 565 ⟶ 570:
sleepSort()
{
self.forEach::(n)
{
threadControl.start(
Line 579 ⟶ 584:
}
}
 
public program()
{
program_arguments.skipping:(1).selectBy(mssgconst toInt<convertorOpintConvertOp>[1]).toArray().sleepSort();
 
console.readChar()
}</syntaxhighlight>
 
Line 1,196 ⟶ 1,201:
<pre>
$ java -jar sleepsort.jar 5 7 -1 2 4 1 8 0 3 9 6
Unsorted: 5 7 2 4 1 8 0 3 9 6
Sorted : 0 1 2 3 4 5 6 7 8 9
</pre>
 
=== Using coroutines ===
<syntaxhighlight lang="kotlin">
import kotlinx.coroutines.*
 
fun sleepSort(list: List<Int>, delta: Long) {
runBlocking {
list.onEach {
launch {
delay(it * delta)
print("$it ")
}
}
}
}
 
fun main() {
val list = listOf(5, 7, 2, 4, 1, 8, 0, 3, 9, 6)
println("Unsorted: ${list.joinToString(" ")}")
print("Sorted : ")
sleepSort(list, 10)
}
 
</syntaxhighlight>
 
Output:
<pre>
Unsorted: 5 7 2 4 1 8 0 3 9 6
Sorted : 0 1 2 3 4 5 6 7 8 9
Line 1,670 ⟶ 1,705:
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</syntaxhighlight>-->
 
=={{header|PHP}}==
A PHP implementation of sleep sort using process forking.
<syntaxhighlight lang="php">
<?php
 
$buffer = 1;
$pids = [];
 
for ($i = 1; $i < $argc; $i++) {
$pid = pcntl_fork();
if ($pid < 0) {
die("failed to start child process");
}
 
if ($pid === 0) {
sleep($argv[$i] + $buffer);
echo $argv[$i] . "\n";
exit();
}
$pids[] = $pid;
}
 
foreach ($pids as $pid) {
pcntl_waitpid($pid, $status);
}
</syntaxhighlight>
<pre>
php ./sleepsort.php 35 21 11 1 2 27 32 7 42 20 50 42 25 41 43 14 46 20 30 8
1
2
7
8
11
14
20
20
21
25
27
30
32
35
41
42
42
43
46
50
</pre>
 
 
=={{header|PicoLisp}}==
Line 2,325 ⟶ 2,412:
=={{header|Wren}}==
More of a simulation than a 'true' sleep sort.
<syntaxhighlight lang="ecmascriptwren">import "timer" for Timer
import "io" for Stdout
import "os" for Process
Line 2,359 ⟶ 2,446:
Sample run:
<pre>
$ wren sleepsortSorting_algorithms_Sleep_sort.wren 1 8 3 7 4 6
Before: 1 8 3 7 4 6
After : 1 3 4 6 7 8
1

edit