From 4fae733892d6fd64d67fa0b2e6223779a219bb86 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Thu, 10 Apr 2003 11:33:13 +0000 Subject: [PATCH] optimized insertion-sort [SVN r18225] --- src/util/sequence.jam | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/util/sequence.jam b/src/util/sequence.jam index 50ab5c0aa..c3f86965b 100644 --- a/src/util/sequence.jam +++ b/src/util/sequence.jam @@ -59,17 +59,36 @@ rule insertion-sort ( s * : ordered * ) local caller = [ CALLER_MODULE ] ; ordered ?= sequence.less ; local result = $(s[1]) ; - for local x in $(s[2-]) + if $(ordered) = sequence.less { local head tail ; - tail = $(result) ; - while $(tail) && [ modules.call-in $(caller) : $(ordered) $(tail[1]) $(x) ] + for local x in $(s[2-]) { - head += $(tail[1]) ; - tail = $(tail[2-]) ; + head = ; + tail = $(result) ; + while $(tail) && ( $(tail[1]) < $(x) ) + { + head += $(tail[1]) ; + tail = $(tail[2-]) ; + } + result = $(head) $(x) $(tail) ; } - result = $(head) $(x) $(tail) ; } + else + { + for local x in $(s[2-]) + { + local head tail ; + tail = $(result) ; + while $(tail) && [ modules.call-in $(caller) : $(ordered) $(tail[1]) $(x) ] + { + head += $(tail[1]) ; + tail = $(tail[2-]) ; + } + result = $(head) $(x) $(tail) ; + } + } + return $(result) ; }