1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#lang racket
;; Sleep sort implementation by Rodolfo Carvalho
;; 2011-10-15
(require rackunit)
(define (sleep-sort-simple lst)
(define M (apply max lst)) ; take maximum value and...
(for ([i (in-list lst)])
(thread
(λ ()
(sleep (/ i M)) ; ...sleep for at most 1 second
(displayln i)))))
(define (sleep-sort lst)
(define M (apply max lst)) ; take maximum value and...
(define reverse-lst '())
(map thread-wait
(for/list ([i (in-list lst)])
(thread
(λ ()
(sleep (/ i M)) ; ...sleep for at most 1 second
(set! reverse-lst (cons i reverse-lst))))))
(reverse reverse-lst))
(sleep-sort-simple '(7 3 1 4 2))
; a few tests
(check-equal? (sleep-sort '(7 3 1 4 2)) '(1 2 3 4 7))
(check-equal? (sleep-sort (shuffle (build-list 100 values))) (build-list 100 values))
|