From ea94f5dea502662d534544462d06e5f0eb2f819f Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Mon, 23 Nov 2009 18:50:12 +0000 Subject: [PATCH] Added `copying-insertionsort' for small blocks, some fixes. svn: r17006 --- collects/scheme/private/sort.ss | 39 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) 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 (