Sorting algorithms/Strand sort: Difference between revisions

Content added Content deleted
(Racket version)
Line 1,157: Line 1,157:
print strand_sort([1, 6, 3, 2, 1, 7, 5, 3])</lang>
print strand_sort([1, 6, 3, 2, 1, 7, 5, 3])</lang>
Output:<lang>[1, 1, 2, 3, 3, 5, 6, 7]</lang>
Output:<lang>[1, 1, 2, 3, 3, 5, 6, 7]</lang>

=={{header|Racket}}==
<lang racket>
#lang racket
(require mzlib/list)
(define (merge xs ys) (merge-sorted-lists xs ys <=))

(define (strand-sort xs)
(let loop ([xs xs] [ys '[]])
(cond [(empty? xs) ys]
[else (define-values (sorted unsorted) (extract-strand xs))
(loop unsorted (merge sorted ys))])))

(define (extract-strand xs)
(for/fold ([strand '()] [unsorted '[]]) ([x xs])
(if (or (empty? strand) (< x (first strand)))
(values (cons x strand) unsorted)
(values strand (cons x unsorted)))))

(strand-sort (build-list 10 (λ(_) (random 15))))
</lang>


=={{header|REXX}}==
=={{header|REXX}}==