diff --git a/collects/scheme/private/sort.ss b/collects/scheme/private/sort.ss index d70669d626..9c6a321cda 100644 --- a/collects/scheme/private/sort.ss +++ b/collects/scheme/private/sort.ss @@ -33,7 +33,7 @@ doing these checks. (define-syntax foo (syntax-rules () [(_ . pattern) template]))])) (define-syntax-rule (sort-internal-body v * j Blo) ( . 1) - (let* ([n/2+ (ceiling (/ n 2))] [n/2- (- n n/2+)]) - (let ([Amid1 (+ Alo n/2-)] - [Amid2 (+ Alo n/2+)] - [Bmid1 (+ Blo n/2-)]) - (copying-mergesort Amid1 Bmid1 n/2+) - (copying-mergesort Alo Amid2 n/2-) - (merge #t Amid2 (+ Alo n) Bmid1 (+ Blo n) Blo)))] - [(= 1 n) (set! Blo (ref Alo))])) + ;; n is never 0, smaller values are more frequent + (cond + [(= n 1) (set! Blo (ref Alo))] + [(= n 2) (let ([x (ref Alo)] [y (ref (add1 Alo))]) + (if (