June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -29,18 +29,8 @@
|
|||
LOGICAL ODD ! even or odd bit position
|
||||
|
||||
* IF (N < 2) RETURN ! validate
|
||||
J = 0 ! find bit size of an integer
|
||||
J = NOT(J)
|
||||
ILIM = 0
|
||||
DO I = 1, 32767 ! much bigger than exists
|
||||
J = ISHFT(J, -1)
|
||||
IF (.NOT. BTEST(J, 0)) THEN
|
||||
ILIM = I
|
||||
GO TO 10
|
||||
END IF
|
||||
END DO
|
||||
10 CONTINUE
|
||||
|
||||
*
|
||||
ILIM = Bit_size(i) !Get the fixed number of bits
|
||||
*=======================================================================
|
||||
* Alternate between putting data into IW and into IX
|
||||
*=======================================================================
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ sub radsort (@ints) {
|
|||
|
||||
for reverse ^$maxlen -> $r {
|
||||
my @buckets = @list.classify( *.substr($r,1) ).sort: *.key;
|
||||
if !$r and @buckets[0].key eq '-' { @buckets[0].value .= reverse }
|
||||
@buckets[0].value = @buckets[0].value.reverse.List
|
||||
if !$r and @buckets[0].key eq '-';
|
||||
@list = flat map *.value.values, @buckets;
|
||||
}
|
||||
@list».Int;
|
||||
|
|
|
|||
|
|
@ -1,29 +1,25 @@
|
|||
#lang racket
|
||||
|
||||
(require data/queue)
|
||||
|
||||
#lang Racket
|
||||
(define (radix-sort l r)
|
||||
(define queues (for/vector #:length r ([_ r]) (make-queue)))
|
||||
(let loop ([l l] [R 1])
|
||||
(define all-zero? #t)
|
||||
(for ([x (in-list l)])
|
||||
(define all-zero? #t)
|
||||
(for ([x (in-list l)])
|
||||
(define x/R (quotient x R))
|
||||
(enqueue! (vector-ref queues (modulo x/R r)) x)
|
||||
(unless (zero? x/R) (set! all-zero? #f)))
|
||||
(if all-zero? l
|
||||
(loop (let q-loop ([i 0])
|
||||
(if all-zero? l
|
||||
(loop (let q-loop ([i 0])
|
||||
(define q (vector-ref queues i))
|
||||
(let dq-loop ()
|
||||
(if (queue-empty? q)
|
||||
(if (< i (sub1 r)) (q-loop (add1 i)) '())
|
||||
(cons (dequeue! q) (dq-loop)))))
|
||||
(* R r)))))
|
||||
|
||||
(for/and ([i 10000]) ; run some tests on random lists with a random radix
|
||||
(define (make-random-list)
|
||||
(for/list ([i (+ 10 (random 10))]) (random 100000)))
|
||||
(for/list ([i (+ 10 (random 10))]) (random 100000)))
|
||||
(define (sorted? l)
|
||||
(match l [(list) #t] [(list x) #t]
|
||||
[(list x y more ...) (and (<= x y) (sorted? (cons y more)))]))
|
||||
(match l [(list) #t] [(list x) #t]
|
||||
[(list x y more ...) (and (<= x y) (sorted? (cons y more)))]))
|
||||
(sorted? (radix-sort (make-random-list) (+ 2 (random 98)))))
|
||||
;; => #t, so all passed
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue