Sorting algorithms/Strand sort: Difference between revisions
Content added Content deleted
m (→{{header|C}}) |
(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}}== |