mirror of
https://github.com/boostorg/sort.git
synced 2026-07-21 13:33:28 +00:00
doc corrections
This commit is contained in:
+41
-41
@@ -1,42 +1,42 @@
|
||||
# Copyright Steven Ross 2009.
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
# See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
local properties = ;
|
||||
if --tune in [ modules.peek : ARGV ]
|
||||
{
|
||||
properties = <location>. <variant>release ;
|
||||
}
|
||||
|
||||
project spreadsort : source-location example : requirements <include>../.. <include>../../.. $(properties) ;
|
||||
|
||||
exe spreadsort : sample.cpp ;
|
||||
exe alreadysorted : alreadysorted.cpp ;
|
||||
exe mostlysorted : mostlysorted.cpp ;
|
||||
exe rightshift : rightshiftsample.cpp ;
|
||||
exe reverseintsort : reverseintsample.cpp ;
|
||||
exe int64 : int64.cpp ;
|
||||
exe floatsort : floatsample.cpp ;
|
||||
exe shiftfloatsort : shiftfloatsample.cpp ;
|
||||
exe floatfunctorsort : floatfunctorsample.cpp ;
|
||||
exe double : double.cpp ;
|
||||
exe stringsort : stringsample.cpp ;
|
||||
exe wstringsort : wstringsample.cpp ;
|
||||
exe reversestringsort : reversestringsample.cpp ;
|
||||
exe charstringsort : charstringsample.cpp ;
|
||||
exe stringfunctorsort : stringfunctorsample.cpp ;
|
||||
exe reversestringfunctorsort : reversestringfunctorsample.cpp ;
|
||||
exe keyplusdata : keyplusdatasample.cpp ;
|
||||
exe randomgen : randomgen.cpp ;
|
||||
exe boostrandomgen : boostrandomgen.cpp ;
|
||||
exe alrbreaker : alrbreaker.cpp ;
|
||||
exe binaryalrbreaker : binaryalrbreaker.cpp ;
|
||||
exe caseinsensitive : caseinsensitive.cpp ;
|
||||
exe generalizedstruct : generalizedstruct.cpp ;
|
||||
|
||||
# benchmarks need to be built with linkflags="-lboost_system -lboost_thread"
|
||||
#exe parallelint : parallelint.cpp boost_system ;
|
||||
# Copyright Steven Ross 2009.
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
# See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
local properties = ;
|
||||
if --tune in [ modules.peek : ARGV ]
|
||||
{
|
||||
properties = <location>. <variant>release ;
|
||||
}
|
||||
|
||||
project spreadsort : source-location example : requirements <include>../.. <include>../../.. $(properties) ;
|
||||
|
||||
exe spreadsort : sample.cpp ;
|
||||
exe alreadysorted : alreadysorted.cpp ;
|
||||
exe mostlysorted : mostlysorted.cpp ;
|
||||
exe rightshift : rightshiftsample.cpp ;
|
||||
exe reverseintsort : reverseintsample.cpp ;
|
||||
exe int64 : int64.cpp ;
|
||||
exe floatsort : floatsample.cpp ;
|
||||
exe shiftfloatsort : shiftfloatsample.cpp ;
|
||||
exe floatfunctorsort : floatfunctorsample.cpp ;
|
||||
exe double : double.cpp ;
|
||||
exe stringsort : stringsample.cpp ;
|
||||
exe wstringsort : wstringsample.cpp ;
|
||||
exe reversestringsort : reversestringsample.cpp ;
|
||||
exe charstringsort : charstringsample.cpp ;
|
||||
exe stringfunctorsort : stringfunctorsample.cpp ;
|
||||
exe reversestringfunctorsort : reversestringfunctorsample.cpp ;
|
||||
exe keyplusdata : keyplusdatasample.cpp ;
|
||||
exe randomgen : randomgen.cpp ;
|
||||
exe boostrandomgen : boostrandomgen.cpp ;
|
||||
exe alrbreaker : alrbreaker.cpp ;
|
||||
exe binaryalrbreaker : binaryalrbreaker.cpp ;
|
||||
exe caseinsensitive : caseinsensitive.cpp ;
|
||||
exe generalizedstruct : generalizedstruct.cpp ;
|
||||
|
||||
# benchmarks need to be built with linkflags="-lboost_system -lboost_thread"
|
||||
#exe parallelint : parallelint.cpp boost_system ;
|
||||
#exe parallelstring : parallelstring.cpp ;
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
The goal of the Boost Sort Library is provide to the users, the most modern and fast sorting algorithms.
|
||||
|
||||
This library provide stable and not stable sorting algorithms, in single thread and parallel versions.
|
||||
This library provides stable and not stable sorting algorithms, in single thread and parallel versions.
|
||||
|
||||
These algorithms do not use any other library or utility. The parallel algorithms need a C++11 compliant compiler.
|
||||
|
||||
@@ -62,7 +62,7 @@ highest speed, changes according to the size of the objects to sort according to
|
||||
<h2>Installation </h2>
|
||||
- This library is **include only**.
|
||||
- Don't need to link with any static or dynamic library. Only need a C++11 compiler
|
||||
- Only need a to include the file boost/sort/sort.hpp
|
||||
- Only need to include the file boost/sort/sort.hpp
|
||||
|
||||
|
||||
<h2>Author and Copyright</h2>
|
||||
|
||||
+165
-165
@@ -1,165 +1,165 @@
|
||||
# Spreadsort documentation Jamfile
|
||||
# Copyright (c) 2014 Steven Ross
|
||||
#
|
||||
# Distributed under the Boost Software License,
|
||||
# Version 1.0. (See accompanying file LICENSE_1_0.txt
|
||||
# or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
# Reminder: whitespace MUST terminate variable name!
|
||||
# so spaces or newlines BEFORE ; and : and AFTER too.
|
||||
# (because : and ; are keywords!)
|
||||
|
||||
import doxygen ;
|
||||
import quickbook ;
|
||||
import os ; # Needed to get environment variables.
|
||||
import modules ;
|
||||
|
||||
path-constant here : . ; # convenient to refer to files in the same directory as this jamfile.v2
|
||||
path-constant boost-images : ../../../doc/src/images ;
|
||||
path-constant images_location : ./doc ; # location of SVG and PNG images referenced by Quickbook.
|
||||
# http://docbook.sourceforge.net/release/xsl/1.77.1/doc/html/img.src.path.html
|
||||
# relative to /doc ?
|
||||
|
||||
path-constant parent : .. ; # Beman Dawes - so that inspect.exe will start in boost-root/libs/timer
|
||||
# when run from another directory, such as boost-root/status
|
||||
using auto-index ;
|
||||
using doxygen ; # Required if you want to use Doxygen.
|
||||
using quickbook ;
|
||||
using boostbook ;
|
||||
|
||||
if --enable-index in [ modules.peek : ARGV ]
|
||||
{
|
||||
ECHO "Building the Spreadsort docs with automatic index generation enabled." ;
|
||||
using auto-index ;
|
||||
project sort_doc : requirements
|
||||
<auto-index>on
|
||||
<auto-index-script>sort.idx
|
||||
<auto-index-prefix>.
|
||||
<auto-index-verbose>on
|
||||
<format>html:<auto-index-internal>on
|
||||
<format>html:<xsl:param>generate.index=0
|
||||
<format>pdf:<auto-index-internal>on
|
||||
<format>pdf:<xsl:param>index.on.type=1
|
||||
<quickbook-define>enable_index ;
|
||||
}
|
||||
else
|
||||
{
|
||||
project sort_doc ;
|
||||
ECHO "Building the Spreadsort docs with automatic index generation disabled. Try building with --enable-index." ;
|
||||
}
|
||||
|
||||
doxygen autodoc
|
||||
:
|
||||
[ glob $(here)/../include/boost/sort.hpp ]
|
||||
[ glob $(here)/../include/boost/sort/spreadsort/*.hpp ]
|
||||
# [ glob $(here)/../include/boost/sort/detail/spreadsort/*.hpp ] # Hide implementation/detail for now.
|
||||
# but could also include this and switch Boost.Sort C++ reference info to include implementation/detail or not using Doxygen macro DETAIL.
|
||||
# See http://www.stack.nl/~dimitri/doxygen/manual/commands.html#cmdcond
|
||||
# and http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_enabled_sections
|
||||
# by adding this line below with other Doxygen parameters
|
||||
# <doxygen:param>ENABLED_SECTIONS="DETAIL"
|
||||
# Or setting this macro value ENABLED_SECTIONS="DETAIL" in /doxygen/sort_doxyfile.txt for Standalone Doxygen documentaation.
|
||||
# This might be useful for maintainers.
|
||||
|
||||
:
|
||||
<doxygen:param>PROJECT_NAME="Sort"
|
||||
<doxygen:param>RECURSIVE=NO
|
||||
<doxygen:param>ENABLE_PREPROCESSING=YES
|
||||
<doxygen:param>EXPAND_ONLY_PREDEF=YES
|
||||
<doxygen:param>EXTRACT_ALL=NO
|
||||
<doxygen:param>EXTRACT_PRIVATE=NO
|
||||
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
|
||||
<doxygen:param>MACRO_EXPANSION=YES
|
||||
<doxygen:param>SORT_MEMBER_DOCS=NO
|
||||
<doxygen:param>SHOW_INCLUDE_FILES=NO
|
||||
<doxygen:param>MAX_INITIALIZER_LINES=0
|
||||
<doxygen:param>VERBATIM_HEADERS=NO
|
||||
<doxygen:param>WARNINGS=NO # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings for undocumented members.
|
||||
# If EXTRACT_ALL is set to YES then this flag will automatically be disabled.
|
||||
<doxygen:param>WARN_IF_UNDOCUMENTED=NO # If WARN_IF_UNDOCUMENTED is set to YES,
|
||||
# then doxygen will generate warnings for all undocumented members.
|
||||
<doxygen:param>WARN_IF_DOC_ERROR=YES # If WARN_IF_DOC_ERROR is set to YES, Doxygen will generate warnings for
|
||||
# potential errors in the documentation.
|
||||
<doxygen:param>WARN_LOGFILE=AutoDoxywarnings.log # This may not be empty (usually not a good sign!), depending on options chosen.
|
||||
# Much better to send message to a logfile than the default stderr.
|
||||
# and make sure that there are no Doxygen errors or significant warnings in the log file.
|
||||
|
||||
#<reftitle>"Reference" # Default is "Reference" but helpful to specify library.
|
||||
<xsl:param>"boost.doxygen.reftitle=Boost.Sort C++ Reference"
|
||||
# See Doxygen configuration for detailed explanation of these options.
|
||||
;
|
||||
|
||||
xml sort
|
||||
:
|
||||
sort.qbk # This is your 'root' Quickbook file (that may include other .qbk files).
|
||||
;
|
||||
|
||||
boostbook standalone
|
||||
:
|
||||
sort
|
||||
:
|
||||
# http://www.sagehill.net/docbookxsl/SectionNumbering.html
|
||||
<xsl:param>boost.root=../../../.. # modular-boost
|
||||
<xsl:param>chapter.autolabel=0 # No Chapter numbering.
|
||||
<xsl:param>chunk.section.depth=8
|
||||
<xsl:param>toc.section.depth=8 # How far down sections get TOCs.
|
||||
<xsl:param>toc.max.depth=4 # Max depth in each TOC.
|
||||
<xsl:param>generate.section.toc.level=1
|
||||
|
||||
|
||||
# PDF Options:
|
||||
# TOC Generation: this is needed for FOP-0.9 and later:
|
||||
<xsl:param>fop1.extensions=0
|
||||
<xsl:param>xep.extensions=1
|
||||
# TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
|
||||
<xsl:param>fop.extensions=1
|
||||
# No indent on body text:
|
||||
<xsl:param>body.start.indent=0pt
|
||||
# Margin size:
|
||||
<xsl:param>page.margin.inner=0.5in
|
||||
# Margin size:
|
||||
<xsl:param>page.margin.outer=0.5in
|
||||
# Paper type = A4
|
||||
<xsl:param>paper.type=A4
|
||||
# Yes, we want graphics for admonishments:
|
||||
<xsl:param>admon.graphics=1
|
||||
#<format>html:<xsl:param>img.src.path=$(images_location)/
|
||||
# Default works for html, need ./doc for PDF
|
||||
# Set this one for PDF generation *only*:
|
||||
# default png graphics are awful in PDF form,
|
||||
# better use SVGs instead, if available:
|
||||
|
||||
<format>pdf:<xsl:param>img.src.path=$(images_location)/
|
||||
<format>pdf:<xsl:param>admon.graphics.extension=".svg"
|
||||
<format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
|
||||
|
||||
<dependency>autodoc #
|
||||
|
||||
;
|
||||
|
||||
install pdfinstall
|
||||
: standalone
|
||||
: <location>. <install-type>PDF <name>sort.pdf
|
||||
;
|
||||
explicit css ;
|
||||
explicit images ;
|
||||
|
||||
# This will run the inspect tool automatically from the doc folder
|
||||
# but sadly seems to build the tool each time so is very slow.
|
||||
# Also it produces lots of output from the original docs.
|
||||
# So not very useful yet.
|
||||
|
||||
# Run inspect tool.
|
||||
# run /boost/tools/inspect//inspect/<variant>release
|
||||
# : $(parent) -text -brief # command line
|
||||
# : # input files
|
||||
# : <dependency>/boost/filesystem//boost_filesystem
|
||||
# <test-info>always_show_run_output # requirements
|
||||
# : inspect # test name
|
||||
# ;
|
||||
|
||||
###############################################################################
|
||||
alias boostdoc ;
|
||||
explicit boostdoc ;
|
||||
alias boostrelease : standalone ;
|
||||
explicit boostrelease ;
|
||||
# Spreadsort documentation Jamfile
|
||||
# Copyright (c) 2014 Steven Ross
|
||||
#
|
||||
# Distributed under the Boost Software License,
|
||||
# Version 1.0. (See accompanying file LICENSE_1_0.txt
|
||||
# or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
# Reminder: whitespace MUST terminate variable name!
|
||||
# so spaces or newlines BEFORE ; and : and AFTER too.
|
||||
# (because : and ; are keywords!)
|
||||
|
||||
import doxygen ;
|
||||
import quickbook ;
|
||||
import os ; # Needed to get environment variables.
|
||||
import modules ;
|
||||
|
||||
path-constant here : . ; # convenient to refer to files in the same directory as this jamfile.v2
|
||||
path-constant boost-images : ../../../doc/src/images ;
|
||||
path-constant images_location : ./doc ; # location of SVG and PNG images referenced by Quickbook.
|
||||
# http://docbook.sourceforge.net/release/xsl/1.77.1/doc/html/img.src.path.html
|
||||
# relative to /doc ?
|
||||
|
||||
path-constant parent : .. ; # Beman Dawes - so that inspect.exe will start in boost-root/libs/timer
|
||||
# when run from another directory, such as boost-root/status
|
||||
using auto-index ;
|
||||
using doxygen ; # Required if you want to use Doxygen.
|
||||
using quickbook ;
|
||||
using boostbook ;
|
||||
|
||||
if --enable-index in [ modules.peek : ARGV ]
|
||||
{
|
||||
ECHO "Building the Spreadsort docs with automatic index generation enabled." ;
|
||||
using auto-index ;
|
||||
project sort_doc : requirements
|
||||
<auto-index>on
|
||||
<auto-index-script>sort.idx
|
||||
<auto-index-prefix>.
|
||||
<auto-index-verbose>on
|
||||
<format>html:<auto-index-internal>on
|
||||
<format>html:<xsl:param>generate.index=0
|
||||
<format>pdf:<auto-index-internal>on
|
||||
<format>pdf:<xsl:param>index.on.type=1
|
||||
<quickbook-define>enable_index ;
|
||||
}
|
||||
else
|
||||
{
|
||||
project sort_doc ;
|
||||
ECHO "Building the Spreadsort docs with automatic index generation disabled. Try building with --enable-index." ;
|
||||
}
|
||||
|
||||
doxygen autodoc
|
||||
:
|
||||
[ glob $(here)/../include/boost/sort.hpp ]
|
||||
[ glob $(here)/../include/boost/sort/spreadsort/*.hpp ]
|
||||
# [ glob $(here)/../include/boost/sort/detail/spreadsort/*.hpp ] # Hide implementation/detail for now.
|
||||
# but could also include this and switch Boost.Sort C++ reference info to include implementation/detail or not using Doxygen macro DETAIL.
|
||||
# See http://www.stack.nl/~dimitri/doxygen/manual/commands.html#cmdcond
|
||||
# and http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_enabled_sections
|
||||
# by adding this line below with other Doxygen parameters
|
||||
# <doxygen:param>ENABLED_SECTIONS="DETAIL"
|
||||
# Or setting this macro value ENABLED_SECTIONS="DETAIL" in /doxygen/sort_doxyfile.txt for Standalone Doxygen documentaation.
|
||||
# This might be useful for maintainers.
|
||||
|
||||
:
|
||||
<doxygen:param>PROJECT_NAME="Sort"
|
||||
<doxygen:param>RECURSIVE=NO
|
||||
<doxygen:param>ENABLE_PREPROCESSING=YES
|
||||
<doxygen:param>EXPAND_ONLY_PREDEF=YES
|
||||
<doxygen:param>EXTRACT_ALL=NO
|
||||
<doxygen:param>EXTRACT_PRIVATE=NO
|
||||
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
|
||||
<doxygen:param>MACRO_EXPANSION=YES
|
||||
<doxygen:param>SORT_MEMBER_DOCS=NO
|
||||
<doxygen:param>SHOW_INCLUDE_FILES=NO
|
||||
<doxygen:param>MAX_INITIALIZER_LINES=0
|
||||
<doxygen:param>VERBATIM_HEADERS=NO
|
||||
<doxygen:param>WARNINGS=NO # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings for undocumented members.
|
||||
# If EXTRACT_ALL is set to YES then this flag will automatically be disabled.
|
||||
<doxygen:param>WARN_IF_UNDOCUMENTED=NO # If WARN_IF_UNDOCUMENTED is set to YES,
|
||||
# then doxygen will generate warnings for all undocumented members.
|
||||
<doxygen:param>WARN_IF_DOC_ERROR=YES # If WARN_IF_DOC_ERROR is set to YES, Doxygen will generate warnings for
|
||||
# potential errors in the documentation.
|
||||
<doxygen:param>WARN_LOGFILE=AutoDoxywarnings.log # This may not be empty (usually not a good sign!), depending on options chosen.
|
||||
# Much better to send message to a logfile than the default stderr.
|
||||
# and make sure that there are no Doxygen errors or significant warnings in the log file.
|
||||
|
||||
#<reftitle>"Reference" # Default is "Reference" but helpful to specify library.
|
||||
<xsl:param>"boost.doxygen.reftitle=Boost.Sort C++ Reference"
|
||||
# See Doxygen configuration for detailed explanation of these options.
|
||||
;
|
||||
|
||||
xml sort
|
||||
:
|
||||
sort.qbk # This is your 'root' Quickbook file (that may include other .qbk files).
|
||||
;
|
||||
|
||||
boostbook standalone
|
||||
:
|
||||
sort
|
||||
:
|
||||
# http://www.sagehill.net/docbookxsl/SectionNumbering.html
|
||||
<xsl:param>boost.root=../../../.. # modular-boost
|
||||
<xsl:param>chapter.autolabel=0 # No Chapter numbering.
|
||||
<xsl:param>chunk.section.depth=8
|
||||
<xsl:param>toc.section.depth=8 # How far down sections get TOCs.
|
||||
<xsl:param>toc.max.depth=4 # Max depth in each TOC.
|
||||
<xsl:param>generate.section.toc.level=1
|
||||
|
||||
|
||||
# PDF Options:
|
||||
# TOC Generation: this is needed for FOP-0.9 and later:
|
||||
<xsl:param>fop1.extensions=0
|
||||
<xsl:param>xep.extensions=1
|
||||
# TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
|
||||
<xsl:param>fop.extensions=1
|
||||
# No indent on body text:
|
||||
<xsl:param>body.start.indent=0pt
|
||||
# Margin size:
|
||||
<xsl:param>page.margin.inner=0.5in
|
||||
# Margin size:
|
||||
<xsl:param>page.margin.outer=0.5in
|
||||
# Paper type = A4
|
||||
<xsl:param>paper.type=A4
|
||||
# Yes, we want graphics for admonishments:
|
||||
<xsl:param>admon.graphics=1
|
||||
#<format>html:<xsl:param>img.src.path=$(images_location)/
|
||||
# Default works for html, need ./doc for PDF
|
||||
# Set this one for PDF generation *only*:
|
||||
# default png graphics are awful in PDF form,
|
||||
# better use SVGs instead, if available:
|
||||
|
||||
<format>pdf:<xsl:param>img.src.path=$(images_location)/
|
||||
<format>pdf:<xsl:param>admon.graphics.extension=".svg"
|
||||
<format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
|
||||
|
||||
<dependency>autodoc #
|
||||
|
||||
;
|
||||
|
||||
install pdfinstall
|
||||
: standalone
|
||||
: <location>. <install-type>PDF <name>sort.pdf
|
||||
;
|
||||
explicit css ;
|
||||
explicit images ;
|
||||
|
||||
# This will run the inspect tool automatically from the doc folder
|
||||
# but sadly seems to build the tool each time so is very slow.
|
||||
# Also it produces lots of output from the original docs.
|
||||
# So not very useful yet.
|
||||
|
||||
# Run inspect tool.
|
||||
# run /boost/tools/inspect//inspect/<variant>release
|
||||
# : $(parent) -text -brief # command line
|
||||
# : # input files
|
||||
# : <dependency>/boost/filesystem//boost_filesystem
|
||||
# <test-info>always_show_run_output # requirements
|
||||
# : inspect # test name
|
||||
# ;
|
||||
|
||||
###############################################################################
|
||||
alias boostdoc ;
|
||||
explicit boostdoc ;
|
||||
alias boostrelease : standalone ;
|
||||
explicit boostrelease ;
|
||||
|
||||
+59
-59
@@ -3,20 +3,6 @@
|
||||
<namespace name="boost">
|
||||
<namespace name="sort">
|
||||
<namespace name="spreadsort">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<function name="float_mem_cast"><type>Cast_type</type><template>
|
||||
<template-type-parameter name="Data_type"><purpose><para>Floating-point IEEE 754/IEC559 type. </para></purpose></template-type-parameter>
|
||||
<template-type-parameter name="Cast_type"><purpose><para>Integer type (same size) to which to cast.</para></purpose></template-type-parameter>
|
||||
@@ -73,6 +59,20 @@ spreadsort(vec.begin(), vec.end());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -91,25 +91,6 @@ spreadsort(vec.begin(), vec.end());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<function name="integer_sort"><type>void</type><template>
|
||||
@@ -242,6 +223,25 @@ Some performance plots of runtime vs. n and log(range) are provided:<sbr/>
|
||||
<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para>
|
||||
<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para>
|
||||
</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</namespace>
|
||||
</namespace>
|
||||
</namespace>
|
||||
@@ -262,14 +262,6 @@ Some performance plots of runtime vs. n and log(range) are provided:<sbr/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<function name="spreadsort"><type>boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type</type><template>
|
||||
<template-type-parameter name="RandomAccessIter"/>
|
||||
@@ -324,6 +316,14 @@ Some performance plots of runtime vs. n and log(range) are provided:<sbr/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</namespace>
|
||||
</namespace>
|
||||
</namespace>
|
||||
@@ -332,6 +332,24 @@ Some performance plots of runtime vs. n and log(range) are provided:<sbr/>
|
||||
<namespace name="boost">
|
||||
<namespace name="sort">
|
||||
<namespace name="spreadsort">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<function name="string_sort"><type>void</type><template>
|
||||
<template-type-parameter name="RandomAccessIter"><purpose><para><ulink url="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</ulink> </para></purpose></template-type-parameter>
|
||||
<template-type-parameter name="Unsigned_char_type"><purpose><para>Unsigned character type used for string. </para></purpose></template-type-parameter>
|
||||
@@ -668,24 +686,6 @@ Some performance plots of runtime vs. n and log(range) are provided:<sbr/>
|
||||
<para>* K is the log of the range in bits (32 for 32-bit integers using their full range), </para>
|
||||
<para>* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </para>
|
||||
</para></description><requires><para>[<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) is a valid range. </para></requires><postconditions><para>The elements in the range [<computeroutput>first</computeroutput>, <computeroutput>last</computeroutput>) are sorted in ascending order.</para></postconditions><returns><para><computeroutput>void</computeroutput>.</para></returns><throws><simpara><classname>std::exception</classname> Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</simpara></throws></function>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</namespace>
|
||||
</namespace>
|
||||
</namespace>
|
||||
|
||||
+25
-34
@@ -10,11 +10,9 @@
|
||||
[section:block_indirect_sort 3.1- block_indirect_sort]
|
||||
|
||||
|
||||
[section:block_introduction 3.1.1- Introduction]
|
||||
[section:block_description Description]
|
||||
[:
|
||||
|
||||
[h4[_Algorithm Description]]
|
||||
[:
|
||||
[*BLOCK_INDIRECT_SORT] is a new unstable parallel sort, conceived and implemented by Francisco Jose Tapia for the Boost Library.
|
||||
|
||||
The most important characteristics of this algorithm are the *speed* and the *low memory consumption*.
|
||||
@@ -42,23 +40,30 @@ block_size (number of elements) | 4096 | 2048 | 1024 | 768 | 512
|
||||
| | | | | | | |
|
||||
``
|
||||
]
|
||||
|
||||
]
|
||||
[endsect]
|
||||
[br]
|
||||
[section:block_benchmark Benchmark]
|
||||
[:
|
||||
Sorting 100 000 000 64 bits numbers, the measured memory used was:
|
||||
[*[teletype]
|
||||
``
|
||||
| |
|
||||
Algorithm | Memory used |
|
||||
----------------------------------+-------------+
|
||||
Open MP Parallel Sort | 1564 MB |
|
||||
Threading Building Blocks (TBB) | 789 MB |
|
||||
Block Indirect Sort | 790 MB |
|
||||
| |
|
||||
| | |
|
||||
Algorithm | Time (secs) | Memory used |
|
||||
----------------------------------+-------------+-------------+
|
||||
Open MP Parallel Sort | 1.1990 | 1564 MB |
|
||||
Threading Building Blocks (TBB) | 1.6411 | 789 MB |
|
||||
Block Indirect Sort | 0.9270 | 790 MB |
|
||||
| | |
|
||||
``
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
[br]
|
||||
|
||||
[section:block_programming Programming]
|
||||
[:
|
||||
[h4[_Thread specification]]
|
||||
|
||||
[:
|
||||
This algorithm has an integer parameter indicating the *number of threads* to use in the sorting process,
|
||||
which always is the last value in the call. The default value (if left unspecified) is the number of HW threads of
|
||||
@@ -70,10 +75,7 @@ The number of threads is not a fixed number, but is calculated in each execution
|
||||
than the number of hardware threads on the machine. We can pass 100 threads in a machine with 4 HW threads,
|
||||
and in the same mode we can pass a function as (std::thread::hardware_concurrency() / 4 ).
|
||||
If this value is 0, the program is executed with 1 thread.
|
||||
|
||||
]
|
||||
|
||||
|
||||
[h4[_Programming]]
|
||||
[:
|
||||
You only need to include the file boost/sort/sort.hpp to use this algorithm
|
||||
@@ -114,9 +116,8 @@ unpredictable.
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
|
||||
|
||||
[section:block_internal 3.1.2- Internal Description]
|
||||
[br]
|
||||
[section:block_internal Internal Description]
|
||||
[:
|
||||
|
||||
There are two primary categories of parallelization in sorting algorithms.
|
||||
@@ -125,7 +126,7 @@ There are two primary categories of parallelization in sorting algorithms.
|
||||
[h4[_Subdivision Algorithms]]
|
||||
|
||||
|
||||
[:Filter the data and generate two or more parts. Each part obtained is
|
||||
[: Filter the data and generate two or more parts. Each part obtained is
|
||||
filtered and divided by other threads. This filter and division process is done
|
||||
until the size of the part is smaller than a predefined size, then is sorted by a single thread.
|
||||
|
||||
@@ -156,16 +157,12 @@ Examples of this category are
|
||||
|
||||
*Microsoft PPL Parallel Buffered Sort
|
||||
|
||||
]
|
||||
[br]
|
||||
|
||||
|
||||
This generates an *undesirable duality*. With a small number of threads the optimal algorithm is not the optimal for a big number of threads.
|
||||
|
||||
For this reason, the SW designed for a *small machine* is *inadequate* for a *big machine* and vice versa.
|
||||
|
||||
Using only *merging algorithms*, has the *problem of the additional memory* used, usually of the same size as the data.
|
||||
|
||||
]
|
||||
|
||||
[h4[_New Parallel Sort Algorithm (Block Indirect Sort)]]
|
||||
[:
|
||||
@@ -183,12 +180,12 @@ When the program runs with a *small number of threads* the algorithm
|
||||
internally uses a *subdivision algorithm* and has similar performance to TBB, and when run with *many threads*,
|
||||
it internally uses the *new algorithm* and has the performance of GCC Parallel Sort, with the additional advantage of *reduced memory consumption*.
|
||||
|
||||
|
||||
]]
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
[br]
|
||||
|
||||
|
||||
[section:design_process 3.1.3- Design Process]
|
||||
[section:design_process Design Process]
|
||||
|
||||
[:
|
||||
[h4[_Initial Idea]]
|
||||
@@ -232,15 +229,9 @@ written to resolve and parallelize the internal problems.
|
||||
|
||||
If you are interested in a detailed description of the algorithm, you can find it here : [* [@../papers/block_indirect_sort_en.pdf block_indirect_sort_en.pdf]].
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
|
||||
|
||||
|
||||
|
||||
+15
-15
@@ -1,15 +1,15 @@
|
||||
<!--
|
||||
Redirection to local sort Doxygen documentation /libs/sort/doc/doxygen/html/index.html
|
||||
|
||||
Copyright 2014 Paul A. Bristow
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; URL= ./html/index.html">
|
||||
</head>
|
||||
<body>
|
||||
Automatic redirection failed!
|
||||
</body>
|
||||
</html>
|
||||
<!--
|
||||
Redirection to local sort Doxygen documentation /libs/sort/doc/doxygen/html/index.html
|
||||
|
||||
Copyright 2014 Paul A. Bristow
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; URL= ./html/index.html">
|
||||
</head>
|
||||
<body>
|
||||
Automatic redirection failed!
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+10
-10
@@ -9,8 +9,9 @@
|
||||
|
||||
[section:flat_stable_sort 2.4.- flat_stable_sort]
|
||||
|
||||
[:
|
||||
[h4[_Algorithm Description]]
|
||||
[section:flat_stable_sort_description Description]
|
||||
|
||||
|
||||
[:
|
||||
[*Flat_stable_sort] is a new stable sort algorithm, designed and implemented by Francisco Jose Tapia for the Boost Sort Library
|
||||
|
||||
@@ -35,8 +36,9 @@ or some elements are modified, breaking the order of the elements. In these case
|
||||
]
|
||||
]
|
||||
|
||||
[h4[_Memory Used]]
|
||||
|
||||
[:
|
||||
[h4[_Memory Used]]
|
||||
Memory used by the stable sort algorithms measured on Linux x64
|
||||
|
||||
|
||||
@@ -47,18 +49,15 @@ Memory used by the stable sort algorithms measured on Linux x64
|
||||
std::stable_sort | 1177 MB |
|
||||
spinsort | 1175 MB |
|
||||
flat_stable_sort | 788 MB |
|
||||
spreadsort | 785 MB |
|
||||
-------------------+--------------+
|
||||
|
||||
``
|
||||
]
|
||||
]
|
||||
|
||||
[h4[_Benchmark]]
|
||||
[endsect]
|
||||
[section:flat_stable_sort_benchmark Benchmark]
|
||||
[:
|
||||
|
||||
|
||||
|
||||
The benchmark with 100000000 64 bits integers,comparing with std::stable_sort of GCC 6.3 compiler and spinsort, running on a Intel i7-5820K CPU @ 3.30GH shows the mentioned characteristics.
|
||||
|
||||
[*[teletype]
|
||||
@@ -93,8 +92,9 @@ The benchmark with 100000000 64 bits integers,comparing with std::stable_sort of
|
||||
If you want detailed information about this algorithm you can find it in the [@../papers/flat_stable_sort_eng.pdf flat_stable_sort_en.pdf document]
|
||||
|
||||
]
|
||||
[endsect]
|
||||
[section:flat_stable_sort_programming Programming]
|
||||
|
||||
[h4[_Programming]]
|
||||
[:
|
||||
You only need to include the file boost/sort/sort.hpp.
|
||||
|
||||
@@ -118,6 +118,6 @@ This algorithm is [*exception safe], meaning that, the exceptions generated by
|
||||
guarantee the integrity of the objects to sort, but not their relative order. If the exception
|
||||
is generated inside the objects (in the move or copy constructors) the results are undefined.
|
||||
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
||||
+358
-358
@@ -1,358 +1,358 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_float_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_float_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_float_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T05:12:41Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_float_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/chart002.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_float_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_float_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="osx_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_float_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_float_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_float_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T05:12:41Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_float_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/chart002.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="osx_float_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_float_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_float_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_float_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="osx_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,316 +1,316 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,318 +1,318 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../osx_float_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../osx_float_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,283 +1,283 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>5</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>float_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num>0.14</td>
|
||||
<td align=right x:num>2.05</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num>0.53</td>
|
||||
<td align=right x:num>2.14</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
<td align=right x:num>2.17</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.21</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.29</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
<td align=right x:num>2.35</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num>0.57</td>
|
||||
<td align=right x:num>2.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.57</td>
|
||||
<td align=right x:num>2.48</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num>0.63</td>
|
||||
<td align=right x:num>2.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.68</td>
|
||||
<td align=right x:num>2.53</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num>0.76</td>
|
||||
<td align=right x:num>2.51</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.93</td>
|
||||
<td align=right x:num>2.64</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num>1.7</td>
|
||||
<td align=right x:num>2.62</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num>1.29</td>
|
||||
<td align=right x:num>2.86</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.75</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>2.75</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>2.87</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.86</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num>1.27</td>
|
||||
<td align=right x:num>2.93</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>3.07</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num>1.32</td>
|
||||
<td align=right x:num>3.17</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num>1.37</td>
|
||||
<td align=right x:num>3.1</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num>1.44</td>
|
||||
<td align=right x:num>3.09</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num>2.25</td>
|
||||
<td align=right x:num>3.15</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num>2.06</td>
|
||||
<td align=right x:num>3.22</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.86</td>
|
||||
<td align=right x:num>3.09</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num>1.77</td>
|
||||
<td align=right x:num>3.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num>1.75</td>
|
||||
<td align=right x:num>3.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num>1.81</td>
|
||||
<td align=right x:num>3.11</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td align=right x:num>3.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num>1.98</td>
|
||||
<td align=right x:num>3.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td align=right x:num>3.13</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>5</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>float_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num>0.14</td>
|
||||
<td align=right x:num>2.05</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num>0.53</td>
|
||||
<td align=right x:num>2.14</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
<td align=right x:num>2.17</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.21</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.29</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
<td align=right x:num>2.35</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num>0.57</td>
|
||||
<td align=right x:num>2.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.57</td>
|
||||
<td align=right x:num>2.48</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num>0.63</td>
|
||||
<td align=right x:num>2.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.68</td>
|
||||
<td align=right x:num>2.53</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num>0.76</td>
|
||||
<td align=right x:num>2.51</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.93</td>
|
||||
<td align=right x:num>2.64</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num>1.7</td>
|
||||
<td align=right x:num>2.62</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num>1.29</td>
|
||||
<td align=right x:num>2.86</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.75</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>2.75</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>2.87</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num>1.33</td>
|
||||
<td align=right x:num>2.86</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num>1.27</td>
|
||||
<td align=right x:num>2.93</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>1.28</td>
|
||||
<td align=right x:num>3.07</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num>1.32</td>
|
||||
<td align=right x:num>3.17</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num>1.37</td>
|
||||
<td align=right x:num>3.1</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num>1.44</td>
|
||||
<td align=right x:num>3.09</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num>2.25</td>
|
||||
<td align=right x:num>3.15</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num>2.06</td>
|
||||
<td align=right x:num>3.22</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.86</td>
|
||||
<td align=right x:num>3.09</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num>1.77</td>
|
||||
<td align=right x:num>3.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num>1.75</td>
|
||||
<td align=right x:num>3.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num>1.81</td>
|
||||
<td align=right x:num>3.11</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td align=right x:num>3.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num>1.98</td>
|
||||
<td align=right x:num>3.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td align=right x:num>3.13</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>7</x:ActiveRow>
|
||||
<x:ActiveCol>6</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>float_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="4.6000000000000001E-4">0.00046</td>
|
||||
<td align=right x:num="4.8000000000000001E-4">0.00048</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="8.8000000000000003E-4">0.00088</td>
|
||||
<td align=right x:num="9.7999999999999997E-4">0.00098</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.6999999999999999E-3">0.0017</td>
|
||||
<td align=right x:num="2.2499999999999998E-3">0.00225</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="3.3E-3">0.0033</td>
|
||||
<td align=right x:num="4.7999999999999996E-3">0.0048</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="8.8000000000000005E-3">0.0088</td>
|
||||
<td align=right x:num="1.0200000000000001E-2">0.0102</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
<td align=right x:num="2.5499999999999998E-2">0.0255</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="4.2000000000000003E-2">0.042</td>
|
||||
<td align=right x:num="5.3999999999999999E-2">0.054</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="9.6000000000000002E-2">0.096</td>
|
||||
<td align=right x:num>0.11</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.20499999999999999">0.205</td>
|
||||
<td align=right x:num="0.255">0.255</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.44</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>0.92</td>
|
||||
<td align=right x:num>1.18</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>1.9</td>
|
||||
<td align=right x:num>2.59</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>3.44</td>
|
||||
<td align=right x:num>5.48</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>6.74</td>
|
||||
<td align=right x:num>11.93</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>13.97</td>
|
||||
<td align=right x:num>25.41</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>7</x:ActiveRow>
|
||||
<x:ActiveCol>6</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>float_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="4.6000000000000001E-4">0.00046</td>
|
||||
<td align=right x:num="4.8000000000000001E-4">0.00048</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="8.8000000000000003E-4">0.00088</td>
|
||||
<td align=right x:num="9.7999999999999997E-4">0.00098</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.6999999999999999E-3">0.0017</td>
|
||||
<td align=right x:num="2.2499999999999998E-3">0.00225</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="3.3E-3">0.0033</td>
|
||||
<td align=right x:num="4.7999999999999996E-3">0.0048</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="8.8000000000000005E-3">0.0088</td>
|
||||
<td align=right x:num="1.0200000000000001E-2">0.0102</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
<td align=right x:num="2.5499999999999998E-2">0.0255</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="4.2000000000000003E-2">0.042</td>
|
||||
<td align=right x:num="5.3999999999999999E-2">0.054</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="9.6000000000000002E-2">0.096</td>
|
||||
<td align=right x:num>0.11</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.20499999999999999">0.205</td>
|
||||
<td align=right x:num="0.255">0.255</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.44</td>
|
||||
<td align=right x:num>0.54</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>0.92</td>
|
||||
<td align=right x:num>1.18</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>1.9</td>
|
||||
<td align=right x:num>2.59</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>3.44</td>
|
||||
<td align=right x:num>5.48</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>6.74</td>
|
||||
<td align=right x:num>11.93</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>13.97</td>
|
||||
<td align=right x:num>25.41</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_float_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+358
-358
@@ -1,358 +1,358 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_integer_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_integer_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_integer_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T04:48:55Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_integer_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/chart002.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_integer_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_integer_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="osx_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_integer_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_integer_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_integer_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T04:48:55Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_integer_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/chart002.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="osx_integer_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_integer_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_integer_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_integer_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="osx_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,316 +1,316 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,318 +1,318 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../osx_integer_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../osx_integer_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,283 +1,283 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>28</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>integer_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num>0.13</td>
|
||||
<td align=right x:num>1.9</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num>0.52</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num>0.51</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num>0.51</td>
|
||||
<td align=right x:num>1.99</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num>2.05</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num>2.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num>0.53</td>
|
||||
<td align=right x:num>2.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num>0.6</td>
|
||||
<td align=right x:num>2.15</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.67</td>
|
||||
<td align=right x:num>2.25</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num>0.77</td>
|
||||
<td align=right x:num>2.2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.95</td>
|
||||
<td align=right x:num>2.33</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num>1.67</td>
|
||||
<td align=right x:num>2.3</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num>1.27</td>
|
||||
<td align=right x:num>2.34</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num>1.26</td>
|
||||
<td align=right x:num>2.48</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num>1.3</td>
|
||||
<td align=right x:num>2.35</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num>1.34</td>
|
||||
<td align=right x:num>2.33</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num>1.36</td>
|
||||
<td align=right x:num>2.46</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num>1.41</td>
|
||||
<td align=right x:num>2.41</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num>1.39</td>
|
||||
<td align=right x:num>2.46</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>1.39</td>
|
||||
<td align=right x:num>2.57</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num>1.4</td>
|
||||
<td align=right x:num>2.64</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num>1.45</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num>1.49</td>
|
||||
<td align=right x:num>2.55</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num>1.93</td>
|
||||
<td align=right x:num>2.63</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.93</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.61</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.63</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num>1.95</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num>1.95</td>
|
||||
<td align=right x:num>2.57</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num>1.96</td>
|
||||
<td align=right x:num>2.58</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num>1.96</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>28</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>integer_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num>0.13</td>
|
||||
<td align=right x:num>1.9</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num>0.52</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num>0.51</td>
|
||||
<td align=right x:num>2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num>0.51</td>
|
||||
<td align=right x:num>1.99</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num>2.05</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num>2.12</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num>0.53</td>
|
||||
<td align=right x:num>2.19</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.55</td>
|
||||
<td align=right x:num>2.2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num>0.6</td>
|
||||
<td align=right x:num>2.15</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.67</td>
|
||||
<td align=right x:num>2.25</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num>0.77</td>
|
||||
<td align=right x:num>2.2</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.95</td>
|
||||
<td align=right x:num>2.33</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num>1.67</td>
|
||||
<td align=right x:num>2.3</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num>1.27</td>
|
||||
<td align=right x:num>2.34</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num>1.26</td>
|
||||
<td align=right x:num>2.48</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num>1.3</td>
|
||||
<td align=right x:num>2.35</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num>1.34</td>
|
||||
<td align=right x:num>2.33</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num>1.36</td>
|
||||
<td align=right x:num>2.46</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num>1.41</td>
|
||||
<td align=right x:num>2.41</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num>1.39</td>
|
||||
<td align=right x:num>2.46</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>1.39</td>
|
||||
<td align=right x:num>2.57</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num>1.4</td>
|
||||
<td align=right x:num>2.64</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num>1.45</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num>1.49</td>
|
||||
<td align=right x:num>2.55</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num>1.93</td>
|
||||
<td align=right x:num>2.63</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.93</td>
|
||||
<td align=right x:num>2.56</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.61</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num>1.94</td>
|
||||
<td align=right x:num>2.63</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num>1.95</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num>1.95</td>
|
||||
<td align=right x:num>2.57</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num>1.96</td>
|
||||
<td align=right x:num>2.58</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num>1.96</td>
|
||||
<td align=right x:num>2.67</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>10</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>integer_so<span style='display:none'>rt</span></td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="3.5E-4">0.00035</td>
|
||||
<td align=right x:num="3.3E-4">0.00033</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="6.6E-4">0.00066</td>
|
||||
<td align=right x:num="6.9999999999999999E-4">0.0007</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.5E-3">0.0015</td>
|
||||
<td align=right x:num="1.6999999999999999E-3">0.0017</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
<td align=right x:num="3.5000000000000001E-3">0.0035</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="6.1999999999999998E-3">0.0062</td>
|
||||
<td align=right x:num="7.1999999999999998E-3">0.0072</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.2500000000000001E-2">0.0125</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="3.5999999999999997E-2">0.036</td>
|
||||
<td align=right x:num="4.2000000000000003E-2">0.042</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="7.8E-2">0.078</td>
|
||||
<td align=right x:num="9.1999999999999998E-2">0.092</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num>0.17</td>
|
||||
<td align=right x:num>0.2</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.35</td>
|
||||
<td align=right x:num>0.44</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>0.76</td>
|
||||
<td align=right x:num>1</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>1.55</td>
|
||||
<td align=right x:num>2.02</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>3.18</td>
|
||||
<td align=right x:num>4.37</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>5.92</td>
|
||||
<td align=right x:num>9.98</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>12.37</td>
|
||||
<td align=right x:num>20.63</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../osx_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>10</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>integer_so<span style='display:none'>rt</span></td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="3.5E-4">0.00035</td>
|
||||
<td align=right x:num="3.3E-4">0.00033</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="6.6E-4">0.00066</td>
|
||||
<td align=right x:num="6.9999999999999999E-4">0.0007</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.5E-3">0.0015</td>
|
||||
<td align=right x:num="1.6999999999999999E-3">0.0017</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
<td align=right x:num="3.5000000000000001E-3">0.0035</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="6.1999999999999998E-3">0.0062</td>
|
||||
<td align=right x:num="7.1999999999999998E-3">0.0072</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.2500000000000001E-2">0.0125</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="3.5999999999999997E-2">0.036</td>
|
||||
<td align=right x:num="4.2000000000000003E-2">0.042</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="7.8E-2">0.078</td>
|
||||
<td align=right x:num="9.1999999999999998E-2">0.092</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num>0.17</td>
|
||||
<td align=right x:num>0.2</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.35</td>
|
||||
<td align=right x:num>0.44</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>0.76</td>
|
||||
<td align=right x:num>1</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>1.55</td>
|
||||
<td align=right x:num>2.02</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>3.18</td>
|
||||
<td align=right x:num>4.37</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>5.92</td>
|
||||
<td align=right x:num>9.98</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>12.37</td>
|
||||
<td align=right x:num>20.63</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../osx_integer_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+346
-346
@@ -1,346 +1,346 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_string_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_string_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_string_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-02-02T05:53:30Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_string_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_string_sort_files/sheet001.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=2;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Runtimes";
|
||||
c_rgszSh[1] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_string_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_string_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_string_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ActiveSheet>1</x:ActiveSheet>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_string_sort_files/sheet001.htm" name="frSheet">
|
||||
<frame src="osx_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="osx_string_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="osx_string_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="osx_string_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-02-02T05:53:30Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="osx_string_sort_files/chart001.htm">
|
||||
<link id="shLink" href="osx_string_sort_files/sheet001.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=2;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Runtimes";
|
||||
c_rgszSh[1] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="osx_string_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="osx_string_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="osx_string_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ActiveSheet>1</x:ActiveSheet>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="osx_string_sort_files/sheet001.htm" name="frSheet">
|
||||
<frame src="osx_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,314 +1,314 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../OSXstring_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>string_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtimes vs. Size on Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../OSXstring_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>string_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtimes vs. Size on Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../OSXstring_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../OSXstring_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,155 +1,155 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../OSXstring_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Selected/>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>7</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>string_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="5.9999999999999995E-4">0.0006</td>
|
||||
<td align=right x:num="5.9999999999999995E-4">0.0006</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="1E-3">0.001</td>
|
||||
<td align=right x:num="1.1999999999999999E-3">0.0012</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="5.0000000000000001E-3">0.005</td>
|
||||
<td align=right x:num="5.0000000000000001E-3">0.005</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="1.2E-2">0.012</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num>0.02</td>
|
||||
<td align=right x:num>0.03</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num>0.04</td>
|
||||
<td align=right x:num>0.08</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num>0.1</td>
|
||||
<td align=right x:num>0.19</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num>0.18</td>
|
||||
<td align=right x:num>0.46</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.42</td>
|
||||
<td align=right x:num>1.02</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>1.01</td>
|
||||
<td align=right x:num>2.44</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>2.31</td>
|
||||
<td align=right x:num>5.32</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>5.03</td>
|
||||
<td align=right x:num>11.78</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>10.55</td>
|
||||
<td align=right x:num>26.43</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../OSXstring_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Selected/>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>7</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>string_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="5.9999999999999995E-4">0.0006</td>
|
||||
<td align=right x:num="5.9999999999999995E-4">0.0006</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="1E-3">0.001</td>
|
||||
<td align=right x:num="1.1999999999999999E-3">0.0012</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
<td align=right x:num="2.5000000000000001E-3">0.0025</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="5.0000000000000001E-3">0.005</td>
|
||||
<td align=right x:num="5.0000000000000001E-3">0.005</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="1.2E-2">0.012</td>
|
||||
<td align=right x:num="1.7999999999999999E-2">0.018</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num>0.02</td>
|
||||
<td align=right x:num>0.03</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num>0.04</td>
|
||||
<td align=right x:num>0.08</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num>0.1</td>
|
||||
<td align=right x:num>0.19</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num>0.18</td>
|
||||
<td align=right x:num>0.46</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num>0.42</td>
|
||||
<td align=right x:num>1.02</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num>1.01</td>
|
||||
<td align=right x:num>2.44</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num>2.31</td>
|
||||
<td align=right x:num>5.32</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num>5.03</td>
|
||||
<td align=right x:num>11.78</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num>10.55</td>
|
||||
<td align=right x:num>26.43</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../OSXstring_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+358
-358
@@ -1,358 +1,358 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_float_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_float_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_float_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T01:30:00Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_float_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/chart002.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_float_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_float_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="windows_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_float_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_float_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_float_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-27T01:30:00Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_float_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/chart002.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="windows_float_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_float_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_float_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_float_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="windows_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,316 +1,316 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements and MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$34</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$34</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements and MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements and MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$34</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$34</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements and MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,313 +1,313 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>float_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_float_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_float_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,283 +1,283 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>8</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>float_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
<td align=right x:num="2.5000000000000001E-2">0.025</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num="0.29199999999999998">0.292</td>
|
||||
<td align=right x:num="0.11899999999999999">0.119</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num="0.28599999999999998">0.286</td>
|
||||
<td align=right x:num="0.184">0.184</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num="0.27400000000000002">0.274</td>
|
||||
<td align=right x:num>0.26</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num="0.26700000000000002">0.267</td>
|
||||
<td align=right x:num="0.34100000000000003">0.341</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num="0.29099999999999998">0.291</td>
|
||||
<td align=right x:num="0.41399999999999998">0.414</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num="0.309">0.309</td>
|
||||
<td align=right x:num="0.54100000000000004">0.541</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num="0.29399999999999998">0.294</td>
|
||||
<td align=right x:num="0.59299999999999997">0.593</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num="0.32700000000000001">0.327</td>
|
||||
<td align=right x:num="0.73199999999999998">0.732</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num="0.373">0.373</td>
|
||||
<td align=right x:num>0.85</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num="0.46800000000000003">0.468</td>
|
||||
<td align=right x:num="0.91900000000000004">0.919</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num="1.0289999999999999">1.029</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num="0.52600000000000002">0.526</td>
|
||||
<td align=right x:num="1.0640000000000001">1.064</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num="0.79800000000000004">0.798</td>
|
||||
<td align=right x:num="1.2709999999999999">1.271</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num="0.72699999999999998">0.727</td>
|
||||
<td align=right x:num="1.2789999999999999">1.279</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num="0.73599999999999999">0.736</td>
|
||||
<td align=right x:num="1.4339999999999999">1.434</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num="0.77700000000000002">0.777</td>
|
||||
<td align=right x:num="1.4370000000000001">1.437</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num="0.73699999999999999">0.737</td>
|
||||
<td align=right x:num="1.5620000000000001">1.562</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num="0.73599999999999999">0.736</td>
|
||||
<td align=right x:num="1.6639999999999999">1.664</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num="0.72499999999999998">0.725</td>
|
||||
<td align=right x:num="1.8140000000000001">1.814</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>0.74</td>
|
||||
<td align=right x:num="1.954">1.954</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num="0.76600000000000001">0.766</td>
|
||||
<td align=right x:num="2.0219999999999998">2.022</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num="0.874">0.874</td>
|
||||
<td align=right x:num="2.1989999999999998">2.199</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num="1.0880000000000001">1.088</td>
|
||||
<td align=right x:num="2.1120000000000001">2.112</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num="1.377">1.377</td>
|
||||
<td align=right x:num="2.1560000000000001">2.156</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num="1.1839999999999999">1.184</td>
|
||||
<td align=right x:num="2.2469999999999999">2.247</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.09</td>
|
||||
<td align=right x:num="2.1459999999999999">2.146</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num="0.96199999999999997">0.962</td>
|
||||
<td align=right x:num="2.2690000000000001">2.269</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num="0.98199999999999998">0.982</td>
|
||||
<td align=right x:num="2.165">2.165</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num="1.026">1.026</td>
|
||||
<td align=right x:num="2.2759999999999998">2.276</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num="1.202">1.202</td>
|
||||
<td align=right x:num="2.1349999999999998">2.135</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num="1.1930000000000001">1.193</td>
|
||||
<td align=right x:num="2.2589999999999999">2.259</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num="1.1819999999999999">1.182</td>
|
||||
<td align=right x:num="2.2389999999999999">2.239</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>8</x:ActiveRow>
|
||||
<x:ActiveCol>4</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>float_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
<td align=right x:num="2.5000000000000001E-2">0.025</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num="0.29199999999999998">0.292</td>
|
||||
<td align=right x:num="0.11899999999999999">0.119</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num="0.28599999999999998">0.286</td>
|
||||
<td align=right x:num="0.184">0.184</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num="0.27400000000000002">0.274</td>
|
||||
<td align=right x:num>0.26</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num="0.26700000000000002">0.267</td>
|
||||
<td align=right x:num="0.34100000000000003">0.341</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num="0.29099999999999998">0.291</td>
|
||||
<td align=right x:num="0.41399999999999998">0.414</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num="0.309">0.309</td>
|
||||
<td align=right x:num="0.54100000000000004">0.541</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num="0.29399999999999998">0.294</td>
|
||||
<td align=right x:num="0.59299999999999997">0.593</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num="0.32700000000000001">0.327</td>
|
||||
<td align=right x:num="0.73199999999999998">0.732</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num="0.373">0.373</td>
|
||||
<td align=right x:num>0.85</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num="0.46800000000000003">0.468</td>
|
||||
<td align=right x:num="0.91900000000000004">0.919</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.5</td>
|
||||
<td align=right x:num="1.0289999999999999">1.029</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num="0.52600000000000002">0.526</td>
|
||||
<td align=right x:num="1.0640000000000001">1.064</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num="0.79800000000000004">0.798</td>
|
||||
<td align=right x:num="1.2709999999999999">1.271</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num="0.72699999999999998">0.727</td>
|
||||
<td align=right x:num="1.2789999999999999">1.279</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num="0.73599999999999999">0.736</td>
|
||||
<td align=right x:num="1.4339999999999999">1.434</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num="0.77700000000000002">0.777</td>
|
||||
<td align=right x:num="1.4370000000000001">1.437</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num="0.73699999999999999">0.737</td>
|
||||
<td align=right x:num="1.5620000000000001">1.562</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num="0.73599999999999999">0.736</td>
|
||||
<td align=right x:num="1.6639999999999999">1.664</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num="0.72499999999999998">0.725</td>
|
||||
<td align=right x:num="1.8140000000000001">1.814</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num>0.74</td>
|
||||
<td align=right x:num="1.954">1.954</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num="0.76600000000000001">0.766</td>
|
||||
<td align=right x:num="2.0219999999999998">2.022</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num="0.874">0.874</td>
|
||||
<td align=right x:num="2.1989999999999998">2.199</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num="1.0880000000000001">1.088</td>
|
||||
<td align=right x:num="2.1120000000000001">2.112</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num="1.377">1.377</td>
|
||||
<td align=right x:num="2.1560000000000001">2.156</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num="1.1839999999999999">1.184</td>
|
||||
<td align=right x:num="2.2469999999999999">2.247</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num>1.09</td>
|
||||
<td align=right x:num="2.1459999999999999">2.146</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num="0.96199999999999997">0.962</td>
|
||||
<td align=right x:num="2.2690000000000001">2.269</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num="0.98199999999999998">0.982</td>
|
||||
<td align=right x:num="2.165">2.165</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num="1.026">1.026</td>
|
||||
<td align=right x:num="2.2759999999999998">2.276</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num="1.202">1.202</td>
|
||||
<td align=right x:num="2.1349999999999998">2.135</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num="1.1930000000000001">1.193</td>
|
||||
<td align=right x:num="2.2589999999999999">2.259</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num="1.1819999999999999">1.182</td>
|
||||
<td align=right x:num="2.2389999999999999">2.239</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>15</x:ActiveRow>
|
||||
<x:ActiveCol>2</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>float_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="2.41E-4">0.000241</td>
|
||||
<td align=right x:num="4.4000000000000002E-4">0.00044</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="5.0799999999999999E-4">0.000508</td>
|
||||
<td align=right x:num="9.68E-4">0.000968</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.0250000000000001E-3">0.001025</td>
|
||||
<td align=right x:num="2.1299999999999999E-3">0.00213</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.14E-3">0.00214</td>
|
||||
<td align=right x:num="4.6100000000000004E-3">0.00461</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="4.9199999999999999E-3">0.00492</td>
|
||||
<td align=right x:num="9.4999999999999998E-3">0.0095</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.5049999999999999E-2">0.01505</td>
|
||||
<td align=right x:num="2.0799999999999999E-2">0.0208</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="2.6599999999999999E-2">0.0266</td>
|
||||
<td align=right x:num="4.3400000000000001E-2">0.0434</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="5.74E-2">0.0574</td>
|
||||
<td align=right x:num="9.1800000000000007E-2">0.0918</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.1255">0.1255</td>
|
||||
<td align=right x:num="0.1915">0.1915</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num="0.28199999999999997">0.282</td>
|
||||
<td align=right x:num="0.39700000000000002">0.397</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num="0.60399999999999998">0.604</td>
|
||||
<td align=right x:num="0.83399999999999996">0.834</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num="1.2629999999999999">1.263</td>
|
||||
<td align=right x:num="1.752">1.752</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num="1.732">1.732</td>
|
||||
<td align=right x:num="3.766">3.766</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num="3.5310000000000001">3.531</td>
|
||||
<td align=right x:num="7.548">7.548</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num="7.2510000000000003">7.251</td>
|
||||
<td align=right x:num="15.632999999999999">15.633</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_float_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>15</x:ActiveRow>
|
||||
<x:ActiveCol>2</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>float_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="2.41E-4">0.000241</td>
|
||||
<td align=right x:num="4.4000000000000002E-4">0.00044</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="5.0799999999999999E-4">0.000508</td>
|
||||
<td align=right x:num="9.68E-4">0.000968</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.0250000000000001E-3">0.001025</td>
|
||||
<td align=right x:num="2.1299999999999999E-3">0.00213</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.14E-3">0.00214</td>
|
||||
<td align=right x:num="4.6100000000000004E-3">0.00461</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="4.9199999999999999E-3">0.00492</td>
|
||||
<td align=right x:num="9.4999999999999998E-3">0.0095</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.5049999999999999E-2">0.01505</td>
|
||||
<td align=right x:num="2.0799999999999999E-2">0.0208</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="2.6599999999999999E-2">0.0266</td>
|
||||
<td align=right x:num="4.3400000000000001E-2">0.0434</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="5.74E-2">0.0574</td>
|
||||
<td align=right x:num="9.1800000000000007E-2">0.0918</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.1255">0.1255</td>
|
||||
<td align=right x:num="0.1915">0.1915</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num="0.28199999999999997">0.282</td>
|
||||
<td align=right x:num="0.39700000000000002">0.397</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num="0.60399999999999998">0.604</td>
|
||||
<td align=right x:num="0.83399999999999996">0.834</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num="1.2629999999999999">1.263</td>
|
||||
<td align=right x:num="1.752">1.752</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num="1.732">1.732</td>
|
||||
<td align=right x:num="3.766">3.766</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num="3.5310000000000001">3.531</td>
|
||||
<td align=right x:num="7.548">7.548</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num="7.2510000000000003">7.251</td>
|
||||
<td align=right x:num="15.632999999999999">15.633</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_float_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+359
-359
@@ -1,359 +1,359 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_integer_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_integer_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_integer_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-28T14:34:29Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_integer_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/chart002.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_integer_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ActiveSheet>1</x:ActiveSheet>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_integer_sort_files/chart002.htm" name="frSheet">
|
||||
<frame src="windows_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_integer_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_integer_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_integer_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-07-28T14:34:29Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_integer_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/chart002.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/sheet001.htm">
|
||||
<link id="shLink" href="windows_integer_sort_files/sheet002.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=4;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Ranges";
|
||||
c_rgszSh[1] = "Runtimes";
|
||||
c_rgszSh[2] = "RangeData";
|
||||
c_rgszSh[3] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/chart002.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>RangeData</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_integer_sort_files/sheet002.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_integer_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ActiveSheet>1</x:ActiveSheet>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_integer_sort_files/chart002.htm" name="frSheet">
|
||||
<frame src="windows_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,315 +1,315 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Ranges</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>14</x:ColorIndex>
|
||||
<x:BGColorIndex>Neutral</x:BGColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$B$2:$B$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$A$2:$A$34</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>RangeData!$C$2:$C$33</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Range (bits)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (seconds)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtime vs. range for 10 million elements with MAX_SPLITS 11"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,319 +1,319 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>integer_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$16</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$16</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image002.gif
|
||||
alt="Runtimes vs. Size on 32-bit Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_integer_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_integer_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="chart002.htm"/>
|
||||
<o:File HRef="image002.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="sheet002.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,283 +1,283 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>32</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>integer_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num="0.10199999999999999">0.102</td>
|
||||
<td align=right x:num="1.7000000000000001E-2">0.017</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num="0.377">0.377</td>
|
||||
<td align=right x:num="9.2999999999999999E-2">0.093</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num="0.36899999999999999">0.369</td>
|
||||
<td align=right x:num="0.14799999999999999">0.148</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num="0.32300000000000001">0.323</td>
|
||||
<td align=right x:num="0.21199999999999999">0.212</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num="0.33400000000000002">0.334</td>
|
||||
<td align=right x:num="0.27300000000000002">0.273</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num="0.35399999999999998">0.354</td>
|
||||
<td align=right x:num="0.34100000000000003">0.341</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num="0.34599999999999997">0.346</td>
|
||||
<td align=right x:num>0.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.34</td>
|
||||
<td align=right x:num="0.50700000000000001">0.507</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num="0.34300000000000003">0.343</td>
|
||||
<td align=right x:num="0.57099999999999995">0.571</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.4</td>
|
||||
<td align=right x:num="0.75700000000000001">0.757</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num="0.54100000000000004">0.541</td>
|
||||
<td align=right x:num="0.74099999999999999">0.741</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.59</td>
|
||||
<td align=right x:num="0.80900000000000005">0.809</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num="0.64600000000000002">0.646</td>
|
||||
<td align=right x:num="1.008">1.008</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num="0.89800000000000002">0.898</td>
|
||||
<td align=right x:num="1.0760000000000001">1.076</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num="0.94499999999999995">0.945</td>
|
||||
<td align=right x:num="1.2110000000000001">1.211</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num="0.94299999999999995">0.943</td>
|
||||
<td align=right x:num="1.286">1.286</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num="0.89500000000000002">0.895</td>
|
||||
<td align=right x:num="1.371">1.371</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num="0.93300000000000005">0.933</td>
|
||||
<td align=right x:num="1.4850000000000001">1.485</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num="0.93899999999999995">0.939</td>
|
||||
<td align=right x:num="1.5860000000000001">1.586</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num="0.93500000000000005">0.935</td>
|
||||
<td align=right x:num="1.7450000000000001">1.745</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num="0.874">0.874</td>
|
||||
<td align=right x:num="1.7569999999999999">1.757</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num="0.86099999999999999">0.861</td>
|
||||
<td align=right x:num="1.931">1.931</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num="0.89500000000000002">0.895</td>
|
||||
<td align=right x:num="1.752">1.752</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num="1.0640000000000001">1.064</td>
|
||||
<td align=right x:num="1.802">1.802</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num="1.294">1.294</td>
|
||||
<td align=right x:num>1.79</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num="1.115">1.115</td>
|
||||
<td align=right x:num="1.8160000000000001">1.816</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num="1.127">1.127</td>
|
||||
<td align=right x:num="2.069">2.069</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num="1.2709999999999999">1.271</td>
|
||||
<td align=right x:num="1.9870000000000001">1.987</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num="1.272">1.272</td>
|
||||
<td align=right x:num="1.796">1.796</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num="1.147">1.147</td>
|
||||
<td align=right x:num="1.8049999999999999">1.805</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num="1.2370000000000001">1.237</td>
|
||||
<td align=right x:num="1.8220000000000001">1.822</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num="1.1479999999999999">1.148</td>
|
||||
<td align=right x:num="1.9670000000000001">1.967</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num="1.147">1.147</td>
|
||||
<td align=right x:num>1.82</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(2);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>32</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=355 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:267pt'>
|
||||
<col width=98 style='mso-width-source:userset;mso-width-alt:3584;width:74pt'>
|
||||
<col width=76 style='mso-width-source:userset;mso-width-alt:2779;width:57pt'>
|
||||
<col width=53 style='mso-width-source:userset;mso-width-alt:1938;width:40pt'>
|
||||
<col width=64 span=2 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=98 style='height:12.75pt;width:74pt'>Range (bits)</td>
|
||||
<td width=76 style='width:57pt'>integer_sort</td>
|
||||
<td width=53 style='width:40pt'>std::sort</td>
|
||||
<td colspan=2 width=128 style='mso-ignore:colspan;width:96pt'>1E7 elements</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>0</td>
|
||||
<td align=right x:num="0.10199999999999999">0.102</td>
|
||||
<td align=right x:num="1.7000000000000001E-2">0.017</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2+1">1</td>
|
||||
<td align=right x:num="0.377">0.377</td>
|
||||
<td align=right x:num="9.2999999999999999E-2">0.093</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3+1">2</td>
|
||||
<td align=right x:num="0.36899999999999999">0.369</td>
|
||||
<td align=right x:num="0.14799999999999999">0.148</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4+1">3</td>
|
||||
<td align=right x:num="0.32300000000000001">0.323</td>
|
||||
<td align=right x:num="0.21199999999999999">0.212</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5+1">4</td>
|
||||
<td align=right x:num="0.33400000000000002">0.334</td>
|
||||
<td align=right x:num="0.27300000000000002">0.273</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6+1">5</td>
|
||||
<td align=right x:num="0.35399999999999998">0.354</td>
|
||||
<td align=right x:num="0.34100000000000003">0.341</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7+1">6</td>
|
||||
<td align=right x:num="0.34599999999999997">0.346</td>
|
||||
<td align=right x:num>0.43</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8+1">7</td>
|
||||
<td align=right x:num>0.34</td>
|
||||
<td align=right x:num="0.50700000000000001">0.507</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9+1">8</td>
|
||||
<td align=right x:num="0.34300000000000003">0.343</td>
|
||||
<td align=right x:num="0.57099999999999995">0.571</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10+1">9</td>
|
||||
<td align=right x:num>0.4</td>
|
||||
<td align=right x:num="0.75700000000000001">0.757</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A11+1">10</td>
|
||||
<td align=right x:num="0.54100000000000004">0.541</td>
|
||||
<td align=right x:num="0.74099999999999999">0.741</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A12+1">11</td>
|
||||
<td align=right x:num>0.59</td>
|
||||
<td align=right x:num="0.80900000000000005">0.809</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A13+1">12</td>
|
||||
<td align=right x:num="0.64600000000000002">0.646</td>
|
||||
<td align=right x:num="1.008">1.008</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A14+1">13</td>
|
||||
<td align=right x:num="0.89800000000000002">0.898</td>
|
||||
<td align=right x:num="1.0760000000000001">1.076</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A15+1">14</td>
|
||||
<td align=right x:num="0.94499999999999995">0.945</td>
|
||||
<td align=right x:num="1.2110000000000001">1.211</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A16+1">15</td>
|
||||
<td align=right x:num="0.94299999999999995">0.943</td>
|
||||
<td align=right x:num="1.286">1.286</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A17+1">16</td>
|
||||
<td align=right x:num="0.89500000000000002">0.895</td>
|
||||
<td align=right x:num="1.371">1.371</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A18+1">17</td>
|
||||
<td align=right x:num="0.93300000000000005">0.933</td>
|
||||
<td align=right x:num="1.4850000000000001">1.485</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A19+1">18</td>
|
||||
<td align=right x:num="0.93899999999999995">0.939</td>
|
||||
<td align=right x:num="1.5860000000000001">1.586</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A20+1">19</td>
|
||||
<td align=right x:num="0.93500000000000005">0.935</td>
|
||||
<td align=right x:num="1.7450000000000001">1.745</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A21+1">20</td>
|
||||
<td align=right x:num="0.874">0.874</td>
|
||||
<td align=right x:num="1.7569999999999999">1.757</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A22+1">21</td>
|
||||
<td align=right x:num="0.86099999999999999">0.861</td>
|
||||
<td align=right x:num="1.931">1.931</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A23+1">22</td>
|
||||
<td align=right x:num="0.89500000000000002">0.895</td>
|
||||
<td align=right x:num="1.752">1.752</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A24+1">23</td>
|
||||
<td align=right x:num="1.0640000000000001">1.064</td>
|
||||
<td align=right x:num="1.802">1.802</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A25+1">24</td>
|
||||
<td align=right x:num="1.294">1.294</td>
|
||||
<td align=right x:num>1.79</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A26+1">25</td>
|
||||
<td align=right x:num="1.115">1.115</td>
|
||||
<td align=right x:num="1.8160000000000001">1.816</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A27+1">26</td>
|
||||
<td align=right x:num="1.127">1.127</td>
|
||||
<td align=right x:num="2.069">2.069</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A28+1">27</td>
|
||||
<td align=right x:num="1.2709999999999999">1.271</td>
|
||||
<td align=right x:num="1.9870000000000001">1.987</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A29+1">28</td>
|
||||
<td align=right x:num="1.272">1.272</td>
|
||||
<td align=right x:num="1.796">1.796</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A30+1">29</td>
|
||||
<td align=right x:num="1.147">1.147</td>
|
||||
<td align=right x:num="1.8049999999999999">1.805</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A31+1">30</td>
|
||||
<td align=right x:num="1.2370000000000001">1.237</td>
|
||||
<td align=right x:num="1.8220000000000001">1.822</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A32+1">31</td>
|
||||
<td align=right x:num="1.1479999999999999">1.148</td>
|
||||
<td align=right x:num="1.9670000000000001">1.967</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A33+1">32</td>
|
||||
<td align=right x:num="1.147">1.147</td>
|
||||
<td align=right x:num>1.82</td>
|
||||
<td colspan=2 style='mso-ignore:colspan'></td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=98 style='width:74pt'></td>
|
||||
<td width=76 style='width:57pt'></td>
|
||||
<td width=53 style='width:40pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>14</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>integer_so<span style='display:none'>rt</span></td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="2.41E-4">0.000241</td>
|
||||
<td align=right x:num="3.7800000000000003E-4">0.000378</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="5.44E-4">0.000544</td>
|
||||
<td align=right x:num="7.9000000000000001E-4">0.00079</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.0499999999999999E-3">0.00105</td>
|
||||
<td align=right x:num="1.7600000000000001E-3">0.00176</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.0200000000000001E-3">0.00202</td>
|
||||
<td align=right x:num="3.81E-3">0.00381</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="4.5799999999999999E-3">0.00458</td>
|
||||
<td align=right x:num="8.2400000000000008E-3">0.00824</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.0500000000000001E-2">0.0105</td>
|
||||
<td align=right x:num="1.7399999999999999E-2">0.0174</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="2.3E-2">0.023</td>
|
||||
<td align=right x:num="3.73E-2">0.0373</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="5.16E-2">0.0516</td>
|
||||
<td align=right x:num="7.7600000000000002E-2">0.0776</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.114">0.114</td>
|
||||
<td align=right x:num="0.157">0.157</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num="0.247">0.247</td>
|
||||
<td align=right x:num="0.33200000000000002">0.332</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num="0.54700000000000004">0.547</td>
|
||||
<td align=right x:num="0.70599999999999996">0.706</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num="1.155">1.155</td>
|
||||
<td align=right x:num="1.5029999999999999">1.503</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num="1.792">1.792</td>
|
||||
<td align=right x:num="3.0609999999999999">3.061</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num="3.6219999999999999">3.622</td>
|
||||
<td align=right x:num="6.3559999999999999">6.356</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>7.4</td>
|
||||
<td align=right x:num>13.12</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(3);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_integer_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>14</x:ActiveRow>
|
||||
<x:ActiveCol>3</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>integer_so<span style='display:none'>rt</span></td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>4000</td>
|
||||
<td align=right x:num="2.41E-4">0.000241</td>
|
||||
<td align=right x:num="3.7800000000000003E-4">0.000378</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">8000</td>
|
||||
<td align=right x:num="5.44E-4">0.000544</td>
|
||||
<td align=right x:num="7.9000000000000001E-4">0.00079</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">16000</td>
|
||||
<td align=right x:num="1.0499999999999999E-3">0.00105</td>
|
||||
<td align=right x:num="1.7600000000000001E-3">0.00176</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">32000</td>
|
||||
<td align=right x:num="2.0200000000000001E-3">0.00202</td>
|
||||
<td align=right x:num="3.81E-3">0.00381</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">64000</td>
|
||||
<td align=right x:num="4.5799999999999999E-3">0.00458</td>
|
||||
<td align=right x:num="8.2400000000000008E-3">0.00824</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">128000</td>
|
||||
<td align=right x:num="1.0500000000000001E-2">0.0105</td>
|
||||
<td align=right x:num="1.7399999999999999E-2">0.0174</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">256000</td>
|
||||
<td align=right x:num="2.3E-2">0.023</td>
|
||||
<td align=right x:num="3.73E-2">0.0373</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A8*2">512000</td>
|
||||
<td align=right x:num="5.16E-2">0.0516</td>
|
||||
<td align=right x:num="7.7600000000000002E-2">0.0776</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A9*2">1024000</td>
|
||||
<td align=right x:num="0.114">0.114</td>
|
||||
<td align=right x:num="0.157">0.157</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A10*2">2048000</td>
|
||||
<td align=right x:num="0.247">0.247</td>
|
||||
<td align=right x:num="0.33200000000000002">0.332</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A11*2">4096000</td>
|
||||
<td align=right x:num="0.54700000000000004">0.547</td>
|
||||
<td align=right x:num="0.70599999999999996">0.706</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A12*2">8192000</td>
|
||||
<td align=right x:num="1.155">1.155</td>
|
||||
<td align=right x:num="1.5029999999999999">1.503</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A13*2">16384000</td>
|
||||
<td align=right x:num="1.792">1.792</td>
|
||||
<td align=right x:num="3.0609999999999999">3.061</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A14*2">32768000</td>
|
||||
<td align=right x:num="3.6219999999999999">3.622</td>
|
||||
<td align=right x:num="6.3559999999999999">6.356</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A15*2">65536000</td>
|
||||
<td align=right x:num>7.4</td>
|
||||
<td align=right x:num>13.12</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_integer_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+345
-345
@@ -1,345 +1,345 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_string_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_string_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_string_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-05-03T18:30:26Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_string_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_string_sort_files/sheet001.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=2;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Runtimes";
|
||||
c_rgszSh[1] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_string_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_string_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_string_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_string_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="windows_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta name="Excel Workbook Frameset">
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link rel=File-List href="windows_string_sort_files/filelist.xml">
|
||||
<link rel=Edit-Time-Data href="windows_string_sort_files/editdata.mso">
|
||||
<link rel=OLE-Object-Data href="windows_string_sort_files/oledata.mso">
|
||||
<!--[if gte mso 9]><xml>
|
||||
<o:DocumentProperties>
|
||||
<o:Author>Steve</o:Author>
|
||||
<o:LastAuthor>Steve</o:LastAuthor>
|
||||
<o:Created>2009-02-02T02:13:19Z</o:Created>
|
||||
<o:LastSaved>2009-05-03T18:30:26Z</o:LastSaved>
|
||||
<o:Company>Home</o:Company>
|
||||
<o:Version>10.2625</o:Version>
|
||||
</o:DocumentProperties>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:DownloadComponents/>
|
||||
<o:LocationOfComponents HRef="file:///D:\"/>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml><![endif]--><![if !supportTabStrip]>
|
||||
<link id="shLink" href="windows_string_sort_files/chart001.htm">
|
||||
<link id="shLink" href="windows_string_sort_files/sheet001.htm">
|
||||
|
||||
<link id="shLink">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var c_lTabs=2;
|
||||
|
||||
var c_rgszSh=new Array(c_lTabs);
|
||||
c_rgszSh[0] = "Runtimes";
|
||||
c_rgszSh[1] = "Runtime Data";
|
||||
|
||||
|
||||
|
||||
var c_rgszClr=new Array(8);
|
||||
c_rgszClr[0]="window";
|
||||
c_rgszClr[1]="buttonface";
|
||||
c_rgszClr[2]="windowframe";
|
||||
c_rgszClr[3]="windowtext";
|
||||
c_rgszClr[4]="threedlightshadow";
|
||||
c_rgszClr[5]="threedhighlight";
|
||||
c_rgszClr[6]="threeddarkshadow";
|
||||
c_rgszClr[7]="threedshadow";
|
||||
|
||||
var g_iShCur;
|
||||
var g_rglTabX=new Array(c_lTabs);
|
||||
|
||||
function fnGetIEVer()
|
||||
{
|
||||
var ua=window.navigator.userAgent
|
||||
var msie=ua.indexOf("MSIE")
|
||||
if (msie>0 && window.navigator.platform=="Win32")
|
||||
return parseInt(ua.substring(msie+5,ua.indexOf(".", msie)));
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
function fnBuildFrameset()
|
||||
{
|
||||
var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+
|
||||
"<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+
|
||||
"<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+
|
||||
"</frameset></frameset><plaintext>";
|
||||
|
||||
with (document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
fnBuildTabStrip();
|
||||
}
|
||||
|
||||
function fnBuildTabStrip()
|
||||
{
|
||||
var szHTML=
|
||||
"<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+
|
||||
".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+
|
||||
"<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+
|
||||
"<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+
|
||||
"<tr><td style=\"font:1pt\"> <td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+
|
||||
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+
|
||||
"<td style=\"font:1pt\"> <td></tr></table></body></html>";
|
||||
|
||||
with (frames['frScroll'].document) {
|
||||
open("text/html","replace");
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
|
||||
szHTML =
|
||||
"<html><head>"+
|
||||
"<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+
|
||||
".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+
|
||||
".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+
|
||||
"</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+
|
||||
" topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>";
|
||||
|
||||
var iCellCount=(c_lTabs+1)*2;
|
||||
|
||||
var i;
|
||||
for (i=0;i<iCellCount;i+=2)
|
||||
szHTML+="<col width=1><col>";
|
||||
|
||||
var iRow;
|
||||
for (iRow=0;iRow<6;iRow++) {
|
||||
|
||||
szHTML+="<tr>";
|
||||
|
||||
if (iRow==5)
|
||||
szHTML+="<td colspan="+iCellCount+"></td>";
|
||||
else {
|
||||
if (iRow==0) {
|
||||
for(i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1 class=\"clBorder\"></td>";
|
||||
} else if (iRow==1) {
|
||||
for(i=0;i<c_lTabs;i++) {
|
||||
szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>";
|
||||
szHTML+=
|
||||
"<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+
|
||||
"<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>";
|
||||
}
|
||||
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>";
|
||||
} else if (iRow==2) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>";
|
||||
szHTML+="<td height=1></td><td height=1></td>";
|
||||
} else if (iRow==3) {
|
||||
for (i=0;i<iCellCount;i++)
|
||||
szHTML+="<td height=1></td>";
|
||||
} else if (iRow==4) {
|
||||
for (i=0;i<c_lTabs;i++)
|
||||
szHTML+="<td height=1 width=1></td><td height=1></td>";
|
||||
szHTML+="<td height=1 width=1></td><td></td>";
|
||||
}
|
||||
}
|
||||
szHTML+="</tr>";
|
||||
}
|
||||
|
||||
szHTML+="</table></body></html>";
|
||||
with (frames['frTabs'].document) {
|
||||
open("text/html","replace");
|
||||
charset=document.charset;
|
||||
write(szHTML);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
function fnInit()
|
||||
{
|
||||
g_rglTabX[0]=0;
|
||||
var i;
|
||||
for (i=1;i<=c_lTabs;i++)
|
||||
with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)])
|
||||
g_rglTabX[i]=offsetLeft+offsetWidth-6;
|
||||
}
|
||||
|
||||
function fnTabToCol(iTab)
|
||||
{
|
||||
return 2*iTab+1;
|
||||
}
|
||||
|
||||
function fnNextTab(fDir)
|
||||
{
|
||||
var iNextTab=-1;
|
||||
var i;
|
||||
|
||||
with (frames['frTabs'].document.body) {
|
||||
if (fDir==0) {
|
||||
if (scrollLeft>0) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i-1;
|
||||
}
|
||||
} else {
|
||||
if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) {
|
||||
for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++);
|
||||
if (i<c_lTabs)
|
||||
iNextTab=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return iNextTab;
|
||||
}
|
||||
|
||||
function fnScrollTabs(fDir)
|
||||
{
|
||||
var iNextTab=fnNextTab(fDir);
|
||||
|
||||
if (iNextTab>=0) {
|
||||
frames['frTabs'].scroll(g_rglTabX[iNextTab],0);
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
function fnFastScrollTabs(fDir)
|
||||
{
|
||||
if (c_lTabs>16)
|
||||
frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0);
|
||||
else
|
||||
if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5);
|
||||
}
|
||||
|
||||
function fnSetTabProps(iTab,fActive)
|
||||
{
|
||||
var iCol=fnTabToCol(iTab);
|
||||
var i;
|
||||
|
||||
if (iTab>=0) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
with (tbTabs) {
|
||||
for (i=0;i<=4;i++) {
|
||||
with (rows[i]) {
|
||||
if (i==0)
|
||||
cells[iCol].style.background=c_rgszClr[fActive?0:2];
|
||||
else if (i>0 && i<4) {
|
||||
if (fActive) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[0];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
if (i==1) {
|
||||
cells[iCol-1].style.background=c_rgszClr[2];
|
||||
cells[iCol].style.background=c_rgszClr[1];
|
||||
cells[iCol+1].style.background=c_rgszClr[2];
|
||||
} else {
|
||||
cells[iCol-1].style.background=c_rgszClr[4];
|
||||
cells[iCol].style.background=c_rgszClr[(i==2)?2:4];
|
||||
cells[iCol+1].style.background=c_rgszClr[4];
|
||||
}
|
||||
}
|
||||
} else
|
||||
cells[iCol].style.background=c_rgszClr[fActive?2:4];
|
||||
}
|
||||
}
|
||||
}
|
||||
with (aTab[iTab].style) {
|
||||
cursor=(fActive?"default":"hand");
|
||||
color=c_rgszClr[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOverScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7];
|
||||
}
|
||||
|
||||
function fnMouseOutScroll(iCtl)
|
||||
{
|
||||
frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6];
|
||||
}
|
||||
|
||||
function fnMouseOverTab(iTab)
|
||||
{
|
||||
if (iTab!=g_iShCur) {
|
||||
var iCol=fnTabToCol(iTab);
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[5];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnMouseOutTab(iTab)
|
||||
{
|
||||
if (iTab>=0) {
|
||||
var elFrom=frames['frTabs'].event.srcElement;
|
||||
var elTo=frames['frTabs'].event.toElement;
|
||||
|
||||
if ((!elTo) ||
|
||||
(elFrom.tagName==elTo.tagName) ||
|
||||
(elTo.tagName=="A" && elTo.parentElement!=elFrom) ||
|
||||
(elFrom.tagName=="A" && elFrom.parentElement!=elTo)) {
|
||||
|
||||
if (iTab!=g_iShCur) {
|
||||
with (frames['frTabs'].document.all) {
|
||||
tdTab[iTab].style.background=c_rgszClr[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fnSetActiveSheet(iSh)
|
||||
{
|
||||
if (iSh!=g_iShCur) {
|
||||
fnSetTabProps(g_iShCur,false);
|
||||
fnSetTabProps(iSh,true);
|
||||
g_iShCur=iSh;
|
||||
}
|
||||
}
|
||||
|
||||
window.g_iIEVer=fnGetIEVer();
|
||||
if (window.g_iIEVer>=4)
|
||||
fnBuildFrameset();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:ExcelWorkbook>
|
||||
<x:ExcelWorksheets>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:WorksheetSource HRef="windows_string_sort_files/chart001.htm"/>
|
||||
<x:WorksheetType>Chart</x:WorksheetType>
|
||||
</x:ExcelWorksheet>
|
||||
<x:ExcelWorksheet>
|
||||
<x:Name>Runtime Data</x:Name>
|
||||
<x:WorksheetSource HRef="windows_string_sort_files/sheet001.htm"/>
|
||||
</x:ExcelWorksheet>
|
||||
</x:ExcelWorksheets>
|
||||
<x:Stylesheet HRef="windows_string_sort_files/stylesheet.css"/>
|
||||
<x:WindowHeight>8700</x:WindowHeight>
|
||||
<x:WindowWidth>10395</x:WindowWidth>
|
||||
<x:WindowTopX>360</x:WindowTopX>
|
||||
<x:WindowTopY>135</x:WindowTopY>
|
||||
<x:ProtectStructure>False</x:ProtectStructure>
|
||||
<x:ProtectWindows>False</x:ProtectWindows>
|
||||
</x:ExcelWorkbook>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0>
|
||||
<frame src="windows_string_sort_files/chart001.htm" name="frSheet">
|
||||
<frame src="windows_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
</html>
|
||||
|
||||
@@ -1,320 +1,320 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_string_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>string_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$13</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$13</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$13</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$13</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtimes vs. Size on Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<!--[if !mso]>
|
||||
<style>
|
||||
v\:* {behavior:url(#default#VML);}
|
||||
o\:* {behavior:url(#default#VML);}
|
||||
x\:* {behavior:url(#default#VML);}
|
||||
.shape {behavior:url(#default#VML);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;
|
||||
mso-page-orientation:landscape;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(0);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_string_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Zoom>93</x:Zoom>
|
||||
<x:Selected/>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:Print>
|
||||
<x:ValidPrinterInfo/>
|
||||
<x:HorizontalResolution>600</x:HorizontalResolution>
|
||||
<x:VerticalResolution>600</x:VerticalResolution>
|
||||
</x:Print>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if gte mso 9]><xml>
|
||||
<x:WebChart>
|
||||
<x:Palette>
|
||||
<x:Entry>#000000</x:Entry>
|
||||
<x:Entry>#FFFFFF</x:Entry>
|
||||
<x:Entry>#FF0000</x:Entry>
|
||||
<x:Entry>#00FF00</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008000</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#808000</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#C0C0C0</x:Entry>
|
||||
<x:Entry>#808080</x:Entry>
|
||||
<x:Entry>#9999FF</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#FFFFCC</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#660066</x:Entry>
|
||||
<x:Entry>#FF8080</x:Entry>
|
||||
<x:Entry>#0066CC</x:Entry>
|
||||
<x:Entry>#CCCCFF</x:Entry>
|
||||
<x:Entry>#000080</x:Entry>
|
||||
<x:Entry>#FF00FF</x:Entry>
|
||||
<x:Entry>#FFFF00</x:Entry>
|
||||
<x:Entry>#00FFFF</x:Entry>
|
||||
<x:Entry>#800080</x:Entry>
|
||||
<x:Entry>#800000</x:Entry>
|
||||
<x:Entry>#008080</x:Entry>
|
||||
<x:Entry>#0000FF</x:Entry>
|
||||
<x:Entry>#00CCFF</x:Entry>
|
||||
<x:Entry>#CCFFFF</x:Entry>
|
||||
<x:Entry>#CCFFCC</x:Entry>
|
||||
<x:Entry>#FFFF99</x:Entry>
|
||||
<x:Entry>#99CCFF</x:Entry>
|
||||
<x:Entry>#FF99CC</x:Entry>
|
||||
<x:Entry>#CC99FF</x:Entry>
|
||||
<x:Entry>#FFCC99</x:Entry>
|
||||
<x:Entry>#3366FF</x:Entry>
|
||||
<x:Entry>#33CCCC</x:Entry>
|
||||
<x:Entry>#99CC00</x:Entry>
|
||||
<x:Entry>#FFCC00</x:Entry>
|
||||
<x:Entry>#FF9900</x:Entry>
|
||||
<x:Entry>#FF6600</x:Entry>
|
||||
<x:Entry>#666699</x:Entry>
|
||||
<x:Entry>#969696</x:Entry>
|
||||
<x:Entry>#003366</x:Entry>
|
||||
<x:Entry>#339966</x:Entry>
|
||||
<x:Entry>#003300</x:Entry>
|
||||
<x:Entry>#333300</x:Entry>
|
||||
<x:Entry>#993300</x:Entry>
|
||||
<x:Entry>#993366</x:Entry>
|
||||
<x:Entry>#333399</x:Entry>
|
||||
<x:Entry>#333333</x:Entry>
|
||||
</x:Palette>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
</x:Scaling>
|
||||
<x:Scaling>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Orientation>MinMax</x:Orientation>
|
||||
<x:LogBase>10</x:LogBase>
|
||||
</x:Scaling>
|
||||
<x:Chart>
|
||||
<x:Name>Runtimes</x:Name>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtimes vs. Size on Random Data</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>12</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:PageSetup>
|
||||
<x:ChartSize>FullPage</x:ChartSize>
|
||||
</x:PageSetup>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Left>0</x:Left>
|
||||
<x:Top>0</x:Top>
|
||||
<x:Width>13660.7958984375</x:Width>
|
||||
<x:Height>9340.7958984375</x:Height>
|
||||
<x:ChartGrowth>
|
||||
<x:HorzGrowth>1</x:HorzGrowth>
|
||||
<x:VertGrowth>1</x:VertGrowth>
|
||||
</x:ChartGrowth>
|
||||
<x:PlotArea>
|
||||
<x:Border>
|
||||
<x:ColorIndex>15</x:ColorIndex>
|
||||
<x:LineStyle>Solid</x:LineStyle>
|
||||
<x:Weight>Narrow</x:Weight>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Graph>
|
||||
<x:Type>Line</x:Type>
|
||||
<x:SubType>Standard</x:SubType>
|
||||
<x:SubType>Marker</x:SubType>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:Series>
|
||||
<x:Index>0</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>string_sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$13</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$B$2:$B$13</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:Series>
|
||||
<x:Index>1</x:Index>
|
||||
<x:Caption>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$1</x:Data>
|
||||
</x:Caption>
|
||||
<x:Name>std::sort</x:Name>
|
||||
<x:Category>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$A$2:$A$13</x:Data>
|
||||
</x:Category>
|
||||
<x:Value>
|
||||
<x:DataSource>0</x:DataSource>
|
||||
<x:Data>'Runtime Data'!$C$2:$C$13</x:Data>
|
||||
</x:Value>
|
||||
</x:Series>
|
||||
<x:PlotVisible/>
|
||||
</x:Graph>
|
||||
<x:Axis>
|
||||
<x:Placement>Bottom</x:Placement>
|
||||
<x:AxisID>0</x:AxisID>
|
||||
<x:ScaleID>0</x:ScaleID>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Element Count</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>1</x:CrossingAxis>
|
||||
<x:CrossesAt>1E-4</x:CrossesAt>
|
||||
<x:LabelOffset>0</x:LabelOffset>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:TickLabelSkip>1</x:TickLabelSkip>
|
||||
<x:TickMarkSkip>1</x:TickMarkSkip>
|
||||
<x:Type>Automatic</x:Type>
|
||||
</x:Axis>
|
||||
<x:Axis>
|
||||
<x:Placement>Left</x:Placement>
|
||||
<x:AxisID>1</x:AxisID>
|
||||
<x:ScaleID>1</x:ScaleID>
|
||||
<x:MajorGridlines/>
|
||||
<x:Title>
|
||||
<x:Caption>
|
||||
<x:DataSource>-1</x:DataSource>
|
||||
<x:Data>"<x:B>Runtime (s)</x:B>"</x:Data>
|
||||
</x:Caption>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:B/>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Border>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Border>
|
||||
<x:Interior>
|
||||
<x:ColorIndex>None</x:ColorIndex>
|
||||
</x:Interior>
|
||||
</x:Title>
|
||||
<x:CrossingAxis>0</x:CrossingAxis>
|
||||
<x:CrossesAt>Minimum</x:CrossesAt>
|
||||
<x:CrossBetween>MidCategory</x:CrossBetween>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
<x:Number>
|
||||
<x:SourceLinked/>
|
||||
<x:BuiltInFormat>0</x:BuiltInFormat>
|
||||
</x:Number>
|
||||
<x:Type>Value</x:Type>
|
||||
</x:Axis>
|
||||
</x:PlotArea>
|
||||
<x:Legend>
|
||||
<x:Placement>Right</x:Placement>
|
||||
<x:Font>
|
||||
<x:FontName>Arial</x:FontName>
|
||||
<x:Size>10</x:Size>
|
||||
<x:AutoScale/>
|
||||
</x:Font>
|
||||
</x:Legend>
|
||||
</x:Chart>
|
||||
</x:WebChart>
|
||||
</xml><![endif]--><![if !supportChartImage]><img src=image001.gif
|
||||
alt="Runtimes vs. Size on Random Data"><![endif]>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_string_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
<o:MainFile HRef="../windows_string_sort.htm"/>
|
||||
<o:File HRef="stylesheet.css"/>
|
||||
<o:File HRef="tabstrip.htm"/>
|
||||
<o:File HRef="chart001.htm"/>
|
||||
<o:File HRef="image001.gif"/>
|
||||
<o:File HRef="sheet001.htm"/>
|
||||
<o:File HRef="filelist.xml"/>
|
||||
</xml>
|
||||
@@ -1,145 +1,145 @@
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_string_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>15</x:ActiveRow>
|
||||
<x:ActiveCol>2</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>string_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>32000</td>
|
||||
<td align=right x:num="1.4999999999999999E-2">0.015</td>
|
||||
<td align=right x:num="1.4999999999999999E-2">0.015</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">64000</td>
|
||||
<td align=right x:num="3.1E-2">0.031</td>
|
||||
<td align=right x:num="4.7E-2">0.047</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">128000</td>
|
||||
<td align=right x:num="4.7E-2">0.047</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">256000</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
<td align=right x:num="9.4E-2">0.094</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">512000</td>
|
||||
<td align=right x:num="7.8E-2">0.078</td>
|
||||
<td align=right x:num="0.187">0.187</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">1024000</td>
|
||||
<td align=right x:num="9.4E-2">0.094</td>
|
||||
<td align=right x:num="0.40500000000000003">0.405</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">2048000</td>
|
||||
<td align=right x:num="0.28100000000000003">0.281</td>
|
||||
<td align=right x:num="0.85799999999999998">0.858</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A8*2">4096000</td>
|
||||
<td align=right x:num>0.78</td>
|
||||
<td align=right x:num="1.8260000000000001">1.826</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A9*2">8192000</td>
|
||||
<td align=right x:num>1.84</td>
|
||||
<td align=right x:num="4.024">4.024</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A10*2">16384000</td>
|
||||
<td align=right x:num="4.165">4.165</td>
|
||||
<td align=right x:num="8.6110000000000007">8.611</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A11*2">32768000</td>
|
||||
<td align=right x:num="8.5169999999999995">8.517</td>
|
||||
<td align=right x:num="17.315999999999999">17.316</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A12*2">65536000</td>
|
||||
<td align=right x:num>13.26</td>
|
||||
<td align=right x:num="38.125999999999998">38.126</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
<link rel=File-List href=filelist.xml>
|
||||
<link rel=Edit-Time-Data href=editdata.mso>
|
||||
<link rel=Stylesheet href=stylesheet.css>
|
||||
<style>
|
||||
<!--table
|
||||
{mso-displayed-decimal-separator:"\.";
|
||||
mso-displayed-thousand-separator:"\,";}
|
||||
@page
|
||||
{margin:1.0in .75in 1.0in .75in;
|
||||
mso-header-margin:.5in;
|
||||
mso-footer-margin:.5in;}
|
||||
-->
|
||||
</style>
|
||||
<![if !supportTabStrip]><script language="JavaScript">
|
||||
<!--
|
||||
function fnUpdateTabs()
|
||||
{
|
||||
if (parent.window.g_iIEVer>=4) {
|
||||
if (parent.document.readyState=="complete"
|
||||
&& parent.frames['frTabs'].document.readyState=="complete")
|
||||
parent.fnSetActiveSheet(1);
|
||||
else
|
||||
window.setTimeout("fnUpdateTabs();",150);
|
||||
}
|
||||
}
|
||||
|
||||
if (window.name!="frSheet")
|
||||
window.location.replace("../windows_string_sort.htm");
|
||||
else
|
||||
fnUpdateTabs();
|
||||
//-->
|
||||
</script>
|
||||
<![endif]><!--[if gte mso 9]><xml>
|
||||
<x:WorksheetOptions>
|
||||
<x:Panes>
|
||||
<x:Pane>
|
||||
<x:Number>3</x:Number>
|
||||
<x:ActiveRow>15</x:ActiveRow>
|
||||
<x:ActiveCol>2</x:ActiveCol>
|
||||
</x:Pane>
|
||||
</x:Panes>
|
||||
<x:ProtectContents>False</x:ProtectContents>
|
||||
<x:ProtectObjects>False</x:ProtectObjects>
|
||||
<x:ProtectScenarios>False</x:ProtectScenarios>
|
||||
</x:WorksheetOptions>
|
||||
</xml><![endif]-->
|
||||
</head>
|
||||
|
||||
<body link=blue vlink=purple>
|
||||
|
||||
<table x:str border=0 cellpadding=0 cellspacing=0 width=192 style='border-collapse:
|
||||
collapse;table-layout:fixed;width:144pt'>
|
||||
<col width=64 span=3 style='width:48pt'>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 width=64 style='height:12.75pt;width:48pt'>Element C<span
|
||||
style='display:none'>ount</span></td>
|
||||
<td width=64 style='width:48pt'>string_sort</td>
|
||||
<td width=64 style='width:48pt'>std::sort</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num>32000</td>
|
||||
<td align=right x:num="1.4999999999999999E-2">0.015</td>
|
||||
<td align=right x:num="1.4999999999999999E-2">0.015</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A2*2">64000</td>
|
||||
<td align=right x:num="3.1E-2">0.031</td>
|
||||
<td align=right x:num="4.7E-2">0.047</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A3*2">128000</td>
|
||||
<td align=right x:num="4.7E-2">0.047</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A4*2">256000</td>
|
||||
<td align=right x:num="6.2E-2">0.062</td>
|
||||
<td align=right x:num="9.4E-2">0.094</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A5*2">512000</td>
|
||||
<td align=right x:num="7.8E-2">0.078</td>
|
||||
<td align=right x:num="0.187">0.187</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A6*2">1024000</td>
|
||||
<td align=right x:num="9.4E-2">0.094</td>
|
||||
<td align=right x:num="0.40500000000000003">0.405</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num x:fmla="=A7*2">2048000</td>
|
||||
<td align=right x:num="0.28100000000000003">0.281</td>
|
||||
<td align=right x:num="0.85799999999999998">0.858</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="4096000"
|
||||
x:fmla="=A8*2">4096000</td>
|
||||
<td align=right x:num>0.78</td>
|
||||
<td align=right x:num="1.8260000000000001">1.826</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="8192000"
|
||||
x:fmla="=A9*2">8192000</td>
|
||||
<td align=right x:num>1.84</td>
|
||||
<td align=right x:num="4.024">4.024</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="16384000"
|
||||
x:fmla="=A10*2">16384000</td>
|
||||
<td align=right x:num="4.165">4.165</td>
|
||||
<td align=right x:num="8.6110000000000007">8.611</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="32768000"
|
||||
x:fmla="=A11*2">32768000</td>
|
||||
<td align=right x:num="8.5169999999999995">8.517</td>
|
||||
<td align=right x:num="17.315999999999999">17.316</td>
|
||||
</tr>
|
||||
<tr height=17 style='height:12.75pt'>
|
||||
<td height=17 align=right style='height:12.75pt' x:num="65536000"
|
||||
x:fmla="=A12*2">65536000</td>
|
||||
<td align=right x:num>13.26</td>
|
||||
<td align=right x:num="38.125999999999998">38.126</td>
|
||||
</tr>
|
||||
<![if supportMisalignedColumns]>
|
||||
<tr height=0 style='display:none'>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
<td width=64 style='width:48pt'></td>
|
||||
</tr>
|
||||
<![endif]>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
tr
|
||||
{mso-height-source:auto;}
|
||||
col
|
||||
{mso-width-source:auto;}
|
||||
br
|
||||
{mso-data-placement:same-cell;}
|
||||
.style0
|
||||
{mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
border:none;
|
||||
mso-protection:locked visible;
|
||||
mso-style-name:Normal;
|
||||
mso-style-id:0;}
|
||||
td
|
||||
{mso-style-parent:style0;
|
||||
padding-top:1px;
|
||||
padding-right:1px;
|
||||
padding-left:1px;
|
||||
mso-ignore:padding;
|
||||
color:windowtext;
|
||||
font-size:10.0pt;
|
||||
font-weight:400;
|
||||
font-style:normal;
|
||||
text-decoration:none;
|
||||
font-family:Arial;
|
||||
mso-generic-font-family:auto;
|
||||
mso-font-charset:0;
|
||||
mso-number-format:General;
|
||||
text-align:general;
|
||||
vertical-align:bottom;
|
||||
border:none;
|
||||
mso-background-source:auto;
|
||||
mso-pattern:auto;
|
||||
mso-protection:locked visible;
|
||||
white-space:nowrap;
|
||||
mso-rotate:0;}
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||
<meta name=ProgId content=Excel.Sheet>
|
||||
<meta name=Generator content="Microsoft Excel 10">
|
||||
<link id=Main-File rel=Main-File href="../windows_string_sort.htm">
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
if (window.name!="frTabs")
|
||||
window.location.replace(document.all.item("Main-File").href);
|
||||
//-->
|
||||
</script>
|
||||
<style>
|
||||
<!--
|
||||
A {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
font-size:9pt;
|
||||
}
|
||||
-->
|
||||
</style>
|
||||
</head>
|
||||
<body topmargin=0 leftmargin=0 bgcolor="#808080">
|
||||
<table border=0 cellspacing=1>
|
||||
<tr>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a> </small></small></b></td>
|
||||
<td bgcolor="#FFFFFF" nowrap><b><small><small> <a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a> </small></small></b></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+226
-226
@@ -1,226 +1,226 @@
|
||||
[/ Symbols and Greek letters (about 120) from HTML4.]
|
||||
[/ File HTML4_symbols.qbk]
|
||||
[/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html]
|
||||
[/ See also http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references]
|
||||
[/ http://www.alanwood.net/demos/ent4_frame.html]
|
||||
[/ http://www.unicode.org/charts/PDF/U2200.pdf and others]
|
||||
[/ All (except 2 angle brackets) show OK on Firefox 2.0 and higher]
|
||||
|
||||
[/ See also Latin-1 aka Western (ISO-8859-1) in latin1_symbols.qbk]
|
||||
[/ http://www.htmlhelp.com/reference/html40/entities/latin1.html]
|
||||
[/Unicode Latin extended http://www.unicode.org/charts/U0080.pdf]
|
||||
|
||||
[/ Also some miscellaneous math characters added to this list - see the end.]
|
||||
[/ For others see also math_toolkit.symbols.qbk]
|
||||
|
||||
[/ To use, enclose the template name in square brackets, for example: [pi]]
|
||||
|
||||
[template fnof[]'''ƒ'''] [/ ƒ Latin small f with hook = function = florin]
|
||||
[/ Capital Greek start with capital letter, lower case all small.]
|
||||
[template Alpha[]'''Α'''] [/ ? Greek capital letter alpha]
|
||||
[template Beta[]'''Β'''] [/ ? Greek capital letter beta]
|
||||
[template Gamma[]'''Γ'''] [/ G Greek capital letter gamma]
|
||||
[template Delta[]'''Δ'''] [/ ? Greek capital letter delta]
|
||||
[template Epsilon[]'''Ε'''] [/ ? Greek capital letter epsilon]
|
||||
[template Zeta[]'''Ζ'''] [/ ? Greek capital letter zeta]
|
||||
[template Eta[]'''Η'''] [/ ? Greek capital letter eta]
|
||||
[template Theta[]'''Θ'''] [/ T Greek capital letter theta]
|
||||
[template Iota[]'''Ι'''] [/ ? Greek capital letter iota]
|
||||
[template Kappa[]'''Κ'''] [/ ? Greek capital letter kappa]
|
||||
[template Lambda[]'''Λ'''] [/ ? Greek capital letter lambda]
|
||||
[template Mu[]'''Μ'''] [/ ? Greek capital letter mu]
|
||||
[template Nu[]'''Ν'''] [/ ? Greek capital letter nu]
|
||||
[template Xi[]'''Ξ'''] [/ ? Greek capital letter xi]
|
||||
[template Omicron[]'''Ο'''] [/ ? Greek capital letter omicron]
|
||||
[template Pi[]'''Π'''] [/ ? Greek capital letter pi]
|
||||
[template Rho[]'''Ρ'''] [/ ? Greek capital letter rho]
|
||||
[template Sigma[]'''Σ'''] [/ S Greek capital letter sigma]
|
||||
[template Tau[]'''Τ'''] [/ ? Greek capital letter tau]
|
||||
[template Upsilon[]'''Υ'''] [/ ? Greek capital letter upsilon]
|
||||
[template Phi[]'''Φ'''] [/ F Greek capital letter phi]
|
||||
[template Chi[]'''Χ'''] [/ ? Greek capital letter chi]
|
||||
[template Psi[]'''Ψ'''] [/ ? Greek capital letter psi]
|
||||
[template Omega[]'''Ω'''] [/ O Greek capital letter omega]
|
||||
[template alpha[]'''α'''] [/ a Greek small letter alpha]
|
||||
[template beta[]'''β'''] [/ ß Greek small letter beta]
|
||||
[template gamma[]'''γ'''] [/ ? Greek small letter gamma]
|
||||
[template delta[]'''δ'''] [/ d Greek small letter delta]
|
||||
[template epsilon[]'''ε'''] [/ e Greek small letter epsilon]
|
||||
[template zeta[]'''ζ'''] [/ ? Greek small letter zeta]
|
||||
[template eta[]'''η'''] [/ ? Greek small letter eta]
|
||||
[template theta[]'''θ'''] [/ ? Greek small letter theta]
|
||||
[template iota[]'''ι'''] [/ ? Greek small letter iota]
|
||||
[template kappa[]'''κ'''] [/ ? Greek small letter kappa]
|
||||
[template lambda[]'''λ'''] [/ ? Greek small letter lambda]
|
||||
[template mu[]'''μ'''] [/ µ Greek small letter mu]
|
||||
[template nu[]'''ν'''] [/ ? Greek small letter nu]
|
||||
[template xi[]'''ξ'''] [/ ? Greek small letter xi]
|
||||
[template omicron[]'''ο'''] [/ ? Greek small letter omicron]
|
||||
[template pi[]'''π'''] [/ p Greek small letter pi]
|
||||
[template rho[]'''ρ'''] [/ ? Greek small letter rho]
|
||||
[template sigmaf[]'''ς'''] [/ ? Greek small letter final sigma]
|
||||
[template sigma[]'''σ'''] [/ s Greek small letter sigma]
|
||||
[template tau[]'''τ'''] [/ t Greek small letter tau]
|
||||
[template upsilon[]'''υ'''] [/ ? Greek small letter upsilon]
|
||||
[template phi[]'''φ'''] [/ f Greek small letter phi]
|
||||
[template chi[]'''χ'''] [/ ? Greek small letter chi]
|
||||
[template psi[]'''ψ'''] [/ ? Greek small letter psi]
|
||||
[template omega[]'''ω'''] [/ ? Greek small letter omega]
|
||||
[template thetasym[]'''ϑ'''] [/ ? Greek small letter theta symbol]
|
||||
[template upsih[]'''ϒ'''] [/ ? Greek upsilon with hook symbol]
|
||||
[template piv[]'''ϖ'''] [/ ? Greek pi symbol]
|
||||
|
||||
[template bull[]'''•'''] [/ • bullet = black small circle]
|
||||
[template hellip[]'''…'''] [/ … horizontal ellipsis = three dot leader]
|
||||
[template prime[]'''′'''] [/ ' prime = minutes = feet]
|
||||
[template Prime[]'''″'''] [/ ? double prime = seconds = inches]
|
||||
[template oline[]'''‾'''] [/ ? overline = spacing overscore]
|
||||
[template frasl[]'''⁄'''] [/ / fraction slash]
|
||||
[template weierp[]'''℘'''] [/ P script capital P = power set = Weierstrass p]
|
||||
[template image[]'''ℑ'''] [/ I blackletter capital I = imaginary part]
|
||||
[template real[]'''ℜ'''] [/ R blackletter capital R = real part math symbol]
|
||||
[template bigo[]'''𝑶'''] [/ O blackletter capital O = big O symbol]
|
||||
[template negative[]'''ℕ'''] [/ N blackletter capital N = Negative number math symbol]
|
||||
[template trade[]'''™'''] [/ ™ trade mark sign]
|
||||
[template alefsym[]'''ℵ'''] [/ ? alef symbol = first transfinite cardinal]
|
||||
[template larr[]'''←'''] [/ ? leftwards arrow]
|
||||
[template uarr[]'''↑'''] [/ ? upwards arrow]
|
||||
[template rarr[]'''→'''] [/ ? rightwards arrow]
|
||||
[template darr[]'''↓'''] [/ ? downwards arrow]
|
||||
[template harr[]'''↔'''] [/ ? left right arrow]
|
||||
[template crarr[]'''↵'''] [/ ? downwards arrow with corner leftwards = CR]
|
||||
[template lArr[]'''⇐'''] [/ ? leftwards double arrow]
|
||||
[template uArr[]'''⇑'''] [/ ? upwards double arrow]
|
||||
[template rArr[]'''⇒'''] [/ ? rightwards double arrow]
|
||||
[template dArr[]'''⇓'''] [/ ? downwards double arrow]
|
||||
[template hArr[]'''⇔'''] [/ ? left right double arrow]
|
||||
[template forall[]'''∀'''] [/ ? for all]
|
||||
[template part[]'''∂'''] [/ ? partial differential]
|
||||
[template exist[]'''∃'''] [/ ? there exists]
|
||||
[template empty[]'''∅'''] [/ Ø empty set = null set = diameter]
|
||||
[template nabla[]'''∇'''] [/ ? nabla = backward difference]
|
||||
[template isin[]'''∈'''] [/ ? element of]
|
||||
[template notin[]'''∉'''] [/ ? not an element of]
|
||||
[template ni[]'''∋'''] [/ ? contains as member]
|
||||
[template prod[]'''∏'''] [/ ? n-ary product = product sign]
|
||||
[template sum[]'''∑'''] [/ ? n-ary sumation]
|
||||
[template minus[]'''−'''] [/ - minus sign]
|
||||
[template lowast[]'''∗'''] [/ * asterisk operator]
|
||||
[template radic[]'''√'''] [/ v square root = radical sign]
|
||||
[template prop[]'''∝'''] [/ ? proportional to]
|
||||
[template infin[]'''∞'''] [/ 8 infinity]
|
||||
[template ang[]'''∠'''] [/ ? angle]
|
||||
[template and[]'''∧'''] [/ ? logical and = wedge]
|
||||
[template or[]'''∨'''] [/ ? logical or = vee]
|
||||
[template cap[]'''∩'''] [/ n intersection = cap]
|
||||
[template cup[]'''∪'''] [/ ? union = cup]
|
||||
[template int[]'''∫'''] [/ ? integral]
|
||||
[template there4[]'''∴'''] [/ ? therefore]
|
||||
[template sim[]'''∼'''] [/ ~ tilde operator = varies with = similar to]
|
||||
[template cong[]'''≅'''] [/ ? approximately equal to]
|
||||
[template approx[]'''≈'''] [/ ? ~~ very approximately equal to]
|
||||
[template asymp[]'''≈'''] [/ ˜ almost equal to = asymptotic to]
|
||||
[template ne[]'''≠'''] [/ ? not equal to]
|
||||
[template equiv[]'''≡'''] [/ = identical to]
|
||||
[template le[]'''≤'''] [/ = less-than or equal to]
|
||||
[template ge[]'''≥'''] [/ = greater-than or equal to]
|
||||
[template subset[]'''⊂'''] [/ ? subset of]
|
||||
[template superset[]'''⊃'''] [/ ? superset of]
|
||||
[template nsubset[]'''⊄'''] [/ ? not a subset of]
|
||||
[template sube[]'''⊆'''] [/ ? subset of or equal to]
|
||||
[template supe[]'''⊇'''] [/ ? superset of or equal to]
|
||||
[template oplus[]'''⊕'''] [/ ? circled plus = direct sum]
|
||||
[template otimes[]'''⊗'''] [/ ? circled times = vector product]
|
||||
[template perp[]'''⊥'''] [/ ? up tack = orthogonal to = perpendicular]
|
||||
[template sdot[]'''⋅'''] [/ · dot operator]
|
||||
[template lceil[]'''⌈'''] [/ ? left ceiling = APL upstile]
|
||||
[template rceil[]'''⌉'''] [/ ? right ceiling]
|
||||
[template lfloor[]'''⌊'''] [/ ? left floor = APL downstile]
|
||||
[template rfloor[]'''⌋'''] [/ ? right floor]
|
||||
[template lang[]'''〈'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)]
|
||||
[template rang[]'''〉'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)]
|
||||
[template loz[]'''◊'''] [/ ? lozenge]
|
||||
[template spades[]'''♠'''] [/ ? black spade suit]
|
||||
[template clubs[]'''♣'''] [/ ? black club suit = shamrock]
|
||||
[template hearts[]'''♥'''] [/ ? black heart suit = valentine]
|
||||
[template diams[]'''♦'''] [/ ? black diamond suit]
|
||||
[template euro[]'''€'''] [/ ? Euro currency symbol]
|
||||
[template lchev[]'''⟨'''] [/ ? left chevron]
|
||||
[template rchev[]'''⟩'''] [/ right chevron]
|
||||
[template rflat[]'''⟮'''] [/ right flat bracket Misc Math Symbol A]
|
||||
[template lflat[]'''⟮'''] [/ left flat bracket]
|
||||
[/ U2000.pdf punctuation]
|
||||
[template endash[]'''–'''] [/ em width dash]
|
||||
[template emdash[]'''—'''] [/ en width dash]
|
||||
[template hbar[]'''―'''] [/ ? horizontal bar - introducing quoted text]
|
||||
[template vert2bar[]'''‖'''] [/ ? double vertical bar]
|
||||
[template line2[]'''‖'''] [/ ? double low line bar]
|
||||
[template dagger[]'''†'''] [/ ? dagger]
|
||||
[template dagger2[]'''‡'''] [/ ? double dagger]
|
||||
[template dot[]'''․'''] [/ dot leader]
|
||||
[template dot2[]'''‥'''] [/ ? dots leader]
|
||||
[template ellipsis[]'''…'''] [/ horizontal ellipsis]
|
||||
[template sect[]'''§'''] [/ ? section or paragraph sign]
|
||||
|
||||
[template dotover[]'''̇'''] [/ dot over symbol]
|
||||
[template recur[]''' ̇'''] [/ math recurring symbol, eg after 0.333]
|
||||
[/ Note use of a thin space before digit, so that dot isn't placed directly over the digit.]
|
||||
[/ Use:1[recur]]
|
||||
|
||||
[/ Other symbols, not in the HTML4 list:]
|
||||
[template enquad[] ''' '''] [/ en quad space]
|
||||
[template emquad[] ''' '''] [/ em quad space]
|
||||
[template enspace[] ''' '''] [/ em half en space]
|
||||
[template emspace[] ''' '''] [/ em space type size in points]
|
||||
[template thickspace[] ''' '''] [/ 3 per em space]
|
||||
[template midspace[] ''' '''] [/ 4 per em space]
|
||||
[template sixemspace[] ''' '''] [/ 6 em space]
|
||||
[template figspace[] ''' '''] [/ space = width fixed font digit]
|
||||
[template punctspace[] ''' '''] [/ space = width punctuation]
|
||||
[template thin[] ''' '''] [/ thin space ]
|
||||
[template hair[] ''' '''] [/ hair space]
|
||||
[template nbsp[] ''' '''] [/ non-breaking space]
|
||||
[template space[] ''' '''] [/ plain non-breaking space]
|
||||
|
||||
[template nospace[] '''​'''] [/ zero width space]
|
||||
[template wordjoin[] '''⁠'''] [/ word joiner - no line break either side]
|
||||
[template narrownbsp[] ''' '''] [/ narrow non-breaking space]
|
||||
[template hyphen[] '''‐'''] [/ soft hyphen]
|
||||
[template nbhyphen[] '''‑'''] [/ non-breaking hyphen]
|
||||
|
||||
[template plusminus[]'''±'''] [/ ? plus or minus sign]
|
||||
[template sqrt[]'''√'''] [/ ? square root sqrt symbol]
|
||||
[/template pow2[]'''⁳'''] [/ 2073 is NOT superscript 2 and 3 characters]
|
||||
[template pow2[]'''²'''] [/ superscript 2 character]
|
||||
[template pow3[]'''³'''] [/ superscript 3 character]
|
||||
[/ Unicode 2070 to 209F has super and subscript digits and characters, unicode.org/charts/PDF/U2070.pdf]
|
||||
[template pow4[]'''⁴'''] [/ superscript 4 character]
|
||||
[template pown[]'''ⁿ'''] [/ superscript n character]
|
||||
[template frac12[]'''½'''] [/ fraction half]
|
||||
[template frac13[]'''⅓'''] [/ fraction third]
|
||||
[template frac14[]'''¼'''] [/ fraction quarter]
|
||||
[template frac34[]'''¾'''] [/ fraction three quarter]
|
||||
[template frac23[]'''⅔'''] [/ fraction two third]
|
||||
[template sup1[]'''¹'''] [/ superscript one = superscript digit one ]
|
||||
[template sup2[]'''²'''] [/ superscript two = superscript digit two = squared ]
|
||||
[template supminus[]'''⁻'''] [/ superscript minus]
|
||||
[template supplus[]'''⁺'''] [/ superscript plus]
|
||||
|
||||
[template cubed[]'''³'''] [/ superscript three = superscript digit three = cubed ]
|
||||
[template macron[]'''¯'''] [/ macron = spacing macron = overline = APL overbar ]
|
||||
[template deg[]'''°'''] [/ degree sign ]
|
||||
[template plusmn[]'''±'''] [/ plus-minus sign = plus-or-minus sign ]
|
||||
[template micro[]'''µ'''] [/ micro sign ]
|
||||
[template cedil[]'''¸'''] [/ cedilla = spacing cedilla ]
|
||||
[template ordm[]'''º'''] [/ masculine ordinal indicator ]
|
||||
[template ordf[]'''ª'''] [/ feminine ordinal indicator ]
|
||||
[template laquo[]'''«'''] [/ left-pointing double angle quotation mark = left pointing guillemet ]
|
||||
[template raquo[]'''»'''] [/ right-pointing double angle quotation mark = right pointing guillemet ]
|
||||
|
||||
[/
|
||||
Copyright 2007, 2010, 2012, 2014 Paul A. Bristow.
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt).
|
||||
]
|
||||
|
||||
[/ Symbols and Greek letters (about 120) from HTML4.]
|
||||
[/ File HTML4_symbols.qbk]
|
||||
[/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html]
|
||||
[/ See also http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references]
|
||||
[/ http://www.alanwood.net/demos/ent4_frame.html]
|
||||
[/ http://www.unicode.org/charts/PDF/U2200.pdf and others]
|
||||
[/ All (except 2 angle brackets) show OK on Firefox 2.0 and higher]
|
||||
|
||||
[/ See also Latin-1 aka Western (ISO-8859-1) in latin1_symbols.qbk]
|
||||
[/ http://www.htmlhelp.com/reference/html40/entities/latin1.html]
|
||||
[/Unicode Latin extended http://www.unicode.org/charts/U0080.pdf]
|
||||
|
||||
[/ Also some miscellaneous math characters added to this list - see the end.]
|
||||
[/ For others see also math_toolkit.symbols.qbk]
|
||||
|
||||
[/ To use, enclose the template name in square brackets, for example: [pi]]
|
||||
|
||||
[template fnof[]'''ƒ'''] [/ ƒ Latin small f with hook = function = florin]
|
||||
[/ Capital Greek start with capital letter, lower case all small.]
|
||||
[template Alpha[]'''Α'''] [/ ? Greek capital letter alpha]
|
||||
[template Beta[]'''Β'''] [/ ? Greek capital letter beta]
|
||||
[template Gamma[]'''Γ'''] [/ G Greek capital letter gamma]
|
||||
[template Delta[]'''Δ'''] [/ ? Greek capital letter delta]
|
||||
[template Epsilon[]'''Ε'''] [/ ? Greek capital letter epsilon]
|
||||
[template Zeta[]'''Ζ'''] [/ ? Greek capital letter zeta]
|
||||
[template Eta[]'''Η'''] [/ ? Greek capital letter eta]
|
||||
[template Theta[]'''Θ'''] [/ T Greek capital letter theta]
|
||||
[template Iota[]'''Ι'''] [/ ? Greek capital letter iota]
|
||||
[template Kappa[]'''Κ'''] [/ ? Greek capital letter kappa]
|
||||
[template Lambda[]'''Λ'''] [/ ? Greek capital letter lambda]
|
||||
[template Mu[]'''Μ'''] [/ ? Greek capital letter mu]
|
||||
[template Nu[]'''Ν'''] [/ ? Greek capital letter nu]
|
||||
[template Xi[]'''Ξ'''] [/ ? Greek capital letter xi]
|
||||
[template Omicron[]'''Ο'''] [/ ? Greek capital letter omicron]
|
||||
[template Pi[]'''Π'''] [/ ? Greek capital letter pi]
|
||||
[template Rho[]'''Ρ'''] [/ ? Greek capital letter rho]
|
||||
[template Sigma[]'''Σ'''] [/ S Greek capital letter sigma]
|
||||
[template Tau[]'''Τ'''] [/ ? Greek capital letter tau]
|
||||
[template Upsilon[]'''Υ'''] [/ ? Greek capital letter upsilon]
|
||||
[template Phi[]'''Φ'''] [/ F Greek capital letter phi]
|
||||
[template Chi[]'''Χ'''] [/ ? Greek capital letter chi]
|
||||
[template Psi[]'''Ψ'''] [/ ? Greek capital letter psi]
|
||||
[template Omega[]'''Ω'''] [/ O Greek capital letter omega]
|
||||
[template alpha[]'''α'''] [/ a Greek small letter alpha]
|
||||
[template beta[]'''β'''] [/ ß Greek small letter beta]
|
||||
[template gamma[]'''γ'''] [/ ? Greek small letter gamma]
|
||||
[template delta[]'''δ'''] [/ d Greek small letter delta]
|
||||
[template epsilon[]'''ε'''] [/ e Greek small letter epsilon]
|
||||
[template zeta[]'''ζ'''] [/ ? Greek small letter zeta]
|
||||
[template eta[]'''η'''] [/ ? Greek small letter eta]
|
||||
[template theta[]'''θ'''] [/ ? Greek small letter theta]
|
||||
[template iota[]'''ι'''] [/ ? Greek small letter iota]
|
||||
[template kappa[]'''κ'''] [/ ? Greek small letter kappa]
|
||||
[template lambda[]'''λ'''] [/ ? Greek small letter lambda]
|
||||
[template mu[]'''μ'''] [/ µ Greek small letter mu]
|
||||
[template nu[]'''ν'''] [/ ? Greek small letter nu]
|
||||
[template xi[]'''ξ'''] [/ ? Greek small letter xi]
|
||||
[template omicron[]'''ο'''] [/ ? Greek small letter omicron]
|
||||
[template pi[]'''π'''] [/ p Greek small letter pi]
|
||||
[template rho[]'''ρ'''] [/ ? Greek small letter rho]
|
||||
[template sigmaf[]'''ς'''] [/ ? Greek small letter final sigma]
|
||||
[template sigma[]'''σ'''] [/ s Greek small letter sigma]
|
||||
[template tau[]'''τ'''] [/ t Greek small letter tau]
|
||||
[template upsilon[]'''υ'''] [/ ? Greek small letter upsilon]
|
||||
[template phi[]'''φ'''] [/ f Greek small letter phi]
|
||||
[template chi[]'''χ'''] [/ ? Greek small letter chi]
|
||||
[template psi[]'''ψ'''] [/ ? Greek small letter psi]
|
||||
[template omega[]'''ω'''] [/ ? Greek small letter omega]
|
||||
[template thetasym[]'''ϑ'''] [/ ? Greek small letter theta symbol]
|
||||
[template upsih[]'''ϒ'''] [/ ? Greek upsilon with hook symbol]
|
||||
[template piv[]'''ϖ'''] [/ ? Greek pi symbol]
|
||||
|
||||
[template bull[]'''•'''] [/ • bullet = black small circle]
|
||||
[template hellip[]'''…'''] [/ … horizontal ellipsis = three dot leader]
|
||||
[template prime[]'''′'''] [/ ' prime = minutes = feet]
|
||||
[template Prime[]'''″'''] [/ ? double prime = seconds = inches]
|
||||
[template oline[]'''‾'''] [/ ? overline = spacing overscore]
|
||||
[template frasl[]'''⁄'''] [/ / fraction slash]
|
||||
[template weierp[]'''℘'''] [/ P script capital P = power set = Weierstrass p]
|
||||
[template image[]'''ℑ'''] [/ I blackletter capital I = imaginary part]
|
||||
[template real[]'''ℜ'''] [/ R blackletter capital R = real part math symbol]
|
||||
[template bigo[]'''𝑶'''] [/ O blackletter capital O = big O symbol]
|
||||
[template negative[]'''ℕ'''] [/ N blackletter capital N = Negative number math symbol]
|
||||
[template trade[]'''™'''] [/ ™ trade mark sign]
|
||||
[template alefsym[]'''ℵ'''] [/ ? alef symbol = first transfinite cardinal]
|
||||
[template larr[]'''←'''] [/ ? leftwards arrow]
|
||||
[template uarr[]'''↑'''] [/ ? upwards arrow]
|
||||
[template rarr[]'''→'''] [/ ? rightwards arrow]
|
||||
[template darr[]'''↓'''] [/ ? downwards arrow]
|
||||
[template harr[]'''↔'''] [/ ? left right arrow]
|
||||
[template crarr[]'''↵'''] [/ ? downwards arrow with corner leftwards = CR]
|
||||
[template lArr[]'''⇐'''] [/ ? leftwards double arrow]
|
||||
[template uArr[]'''⇑'''] [/ ? upwards double arrow]
|
||||
[template rArr[]'''⇒'''] [/ ? rightwards double arrow]
|
||||
[template dArr[]'''⇓'''] [/ ? downwards double arrow]
|
||||
[template hArr[]'''⇔'''] [/ ? left right double arrow]
|
||||
[template forall[]'''∀'''] [/ ? for all]
|
||||
[template part[]'''∂'''] [/ ? partial differential]
|
||||
[template exist[]'''∃'''] [/ ? there exists]
|
||||
[template empty[]'''∅'''] [/ Ø empty set = null set = diameter]
|
||||
[template nabla[]'''∇'''] [/ ? nabla = backward difference]
|
||||
[template isin[]'''∈'''] [/ ? element of]
|
||||
[template notin[]'''∉'''] [/ ? not an element of]
|
||||
[template ni[]'''∋'''] [/ ? contains as member]
|
||||
[template prod[]'''∏'''] [/ ? n-ary product = product sign]
|
||||
[template sum[]'''∑'''] [/ ? n-ary sumation]
|
||||
[template minus[]'''−'''] [/ - minus sign]
|
||||
[template lowast[]'''∗'''] [/ * asterisk operator]
|
||||
[template radic[]'''√'''] [/ v square root = radical sign]
|
||||
[template prop[]'''∝'''] [/ ? proportional to]
|
||||
[template infin[]'''∞'''] [/ 8 infinity]
|
||||
[template ang[]'''∠'''] [/ ? angle]
|
||||
[template and[]'''∧'''] [/ ? logical and = wedge]
|
||||
[template or[]'''∨'''] [/ ? logical or = vee]
|
||||
[template cap[]'''∩'''] [/ n intersection = cap]
|
||||
[template cup[]'''∪'''] [/ ? union = cup]
|
||||
[template int[]'''∫'''] [/ ? integral]
|
||||
[template there4[]'''∴'''] [/ ? therefore]
|
||||
[template sim[]'''∼'''] [/ ~ tilde operator = varies with = similar to]
|
||||
[template cong[]'''≅'''] [/ ? approximately equal to]
|
||||
[template approx[]'''≈'''] [/ ? ~~ very approximately equal to]
|
||||
[template asymp[]'''≈'''] [/ ˜ almost equal to = asymptotic to]
|
||||
[template ne[]'''≠'''] [/ ? not equal to]
|
||||
[template equiv[]'''≡'''] [/ = identical to]
|
||||
[template le[]'''≤'''] [/ = less-than or equal to]
|
||||
[template ge[]'''≥'''] [/ = greater-than or equal to]
|
||||
[template subset[]'''⊂'''] [/ ? subset of]
|
||||
[template superset[]'''⊃'''] [/ ? superset of]
|
||||
[template nsubset[]'''⊄'''] [/ ? not a subset of]
|
||||
[template sube[]'''⊆'''] [/ ? subset of or equal to]
|
||||
[template supe[]'''⊇'''] [/ ? superset of or equal to]
|
||||
[template oplus[]'''⊕'''] [/ ? circled plus = direct sum]
|
||||
[template otimes[]'''⊗'''] [/ ? circled times = vector product]
|
||||
[template perp[]'''⊥'''] [/ ? up tack = orthogonal to = perpendicular]
|
||||
[template sdot[]'''⋅'''] [/ · dot operator]
|
||||
[template lceil[]'''⌈'''] [/ ? left ceiling = APL upstile]
|
||||
[template rceil[]'''⌉'''] [/ ? right ceiling]
|
||||
[template lfloor[]'''⌊'''] [/ ? left floor = APL downstile]
|
||||
[template rfloor[]'''⌋'''] [/ ? right floor]
|
||||
[template lang[]'''〈'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)]
|
||||
[template rang[]'''〉'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)]
|
||||
[template loz[]'''◊'''] [/ ? lozenge]
|
||||
[template spades[]'''♠'''] [/ ? black spade suit]
|
||||
[template clubs[]'''♣'''] [/ ? black club suit = shamrock]
|
||||
[template hearts[]'''♥'''] [/ ? black heart suit = valentine]
|
||||
[template diams[]'''♦'''] [/ ? black diamond suit]
|
||||
[template euro[]'''€'''] [/ ? Euro currency symbol]
|
||||
[template lchev[]'''⟨'''] [/ ? left chevron]
|
||||
[template rchev[]'''⟩'''] [/ right chevron]
|
||||
[template rflat[]'''⟮'''] [/ right flat bracket Misc Math Symbol A]
|
||||
[template lflat[]'''⟮'''] [/ left flat bracket]
|
||||
[/ U2000.pdf punctuation]
|
||||
[template endash[]'''–'''] [/ em width dash]
|
||||
[template emdash[]'''—'''] [/ en width dash]
|
||||
[template hbar[]'''―'''] [/ ? horizontal bar - introducing quoted text]
|
||||
[template vert2bar[]'''‖'''] [/ ? double vertical bar]
|
||||
[template line2[]'''‖'''] [/ ? double low line bar]
|
||||
[template dagger[]'''†'''] [/ ? dagger]
|
||||
[template dagger2[]'''‡'''] [/ ? double dagger]
|
||||
[template dot[]'''․'''] [/ dot leader]
|
||||
[template dot2[]'''‥'''] [/ ? dots leader]
|
||||
[template ellipsis[]'''…'''] [/ horizontal ellipsis]
|
||||
[template sect[]'''§'''] [/ ? section or paragraph sign]
|
||||
|
||||
[template dotover[]'''̇'''] [/ dot over symbol]
|
||||
[template recur[]''' ̇'''] [/ math recurring symbol, eg after 0.333]
|
||||
[/ Note use of a thin space before digit, so that dot isn't placed directly over the digit.]
|
||||
[/ Use:1[recur]]
|
||||
|
||||
[/ Other symbols, not in the HTML4 list:]
|
||||
[template enquad[] ''' '''] [/ en quad space]
|
||||
[template emquad[] ''' '''] [/ em quad space]
|
||||
[template enspace[] ''' '''] [/ em half en space]
|
||||
[template emspace[] ''' '''] [/ em space type size in points]
|
||||
[template thickspace[] ''' '''] [/ 3 per em space]
|
||||
[template midspace[] ''' '''] [/ 4 per em space]
|
||||
[template sixemspace[] ''' '''] [/ 6 em space]
|
||||
[template figspace[] ''' '''] [/ space = width fixed font digit]
|
||||
[template punctspace[] ''' '''] [/ space = width punctuation]
|
||||
[template thin[] ''' '''] [/ thin space ]
|
||||
[template hair[] ''' '''] [/ hair space]
|
||||
[template nbsp[] ''' '''] [/ non-breaking space]
|
||||
[template space[] ''' '''] [/ plain non-breaking space]
|
||||
|
||||
[template nospace[] '''​'''] [/ zero width space]
|
||||
[template wordjoin[] '''⁠'''] [/ word joiner - no line break either side]
|
||||
[template narrownbsp[] ''' '''] [/ narrow non-breaking space]
|
||||
[template hyphen[] '''‐'''] [/ soft hyphen]
|
||||
[template nbhyphen[] '''‑'''] [/ non-breaking hyphen]
|
||||
|
||||
[template plusminus[]'''±'''] [/ ? plus or minus sign]
|
||||
[template sqrt[]'''√'''] [/ ? square root sqrt symbol]
|
||||
[/template pow2[]'''⁳'''] [/ 2073 is NOT superscript 2 and 3 characters]
|
||||
[template pow2[]'''²'''] [/ superscript 2 character]
|
||||
[template pow3[]'''³'''] [/ superscript 3 character]
|
||||
[/ Unicode 2070 to 209F has super and subscript digits and characters, unicode.org/charts/PDF/U2070.pdf]
|
||||
[template pow4[]'''⁴'''] [/ superscript 4 character]
|
||||
[template pown[]'''ⁿ'''] [/ superscript n character]
|
||||
[template frac12[]'''½'''] [/ fraction half]
|
||||
[template frac13[]'''⅓'''] [/ fraction third]
|
||||
[template frac14[]'''¼'''] [/ fraction quarter]
|
||||
[template frac34[]'''¾'''] [/ fraction three quarter]
|
||||
[template frac23[]'''⅔'''] [/ fraction two third]
|
||||
[template sup1[]'''¹'''] [/ superscript one = superscript digit one ]
|
||||
[template sup2[]'''²'''] [/ superscript two = superscript digit two = squared ]
|
||||
[template supminus[]'''⁻'''] [/ superscript minus]
|
||||
[template supplus[]'''⁺'''] [/ superscript plus]
|
||||
|
||||
[template cubed[]'''³'''] [/ superscript three = superscript digit three = cubed ]
|
||||
[template macron[]'''¯'''] [/ macron = spacing macron = overline = APL overbar ]
|
||||
[template deg[]'''°'''] [/ degree sign ]
|
||||
[template plusmn[]'''±'''] [/ plus-minus sign = plus-or-minus sign ]
|
||||
[template micro[]'''µ'''] [/ micro sign ]
|
||||
[template cedil[]'''¸'''] [/ cedilla = spacing cedilla ]
|
||||
[template ordm[]'''º'''] [/ masculine ordinal indicator ]
|
||||
[template ordf[]'''ª'''] [/ feminine ordinal indicator ]
|
||||
[template laquo[]'''«'''] [/ left-pointing double angle quotation mark = left pointing guillemet ]
|
||||
[template raquo[]'''»'''] [/ right-pointing double angle quotation mark = right pointing guillemet ]
|
||||
|
||||
[/
|
||||
Copyright 2007, 2010, 2012, 2014 Paul A. Bristow.
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt).
|
||||
]
|
||||
|
||||
|
||||
+15
-10
@@ -9,7 +9,7 @@
|
||||
|
||||
[section:linux_single 2.5.- Linux Benchmarks]
|
||||
|
||||
[:
|
||||
|
||||
This library contains a benchmark folder with programs to measure the speed of the algorithms on your machine and operating system.
|
||||
These are short benchmarks to test speed with different kinds of data ( random, sorted, sorted plus unsorted append at end ...)
|
||||
|
||||
@@ -17,10 +17,10 @@ This was run on a Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz, with 6 cores and 2 t
|
||||
|
||||
The results obtained with GCC 6.3 on Linux, in the benchmark_numbers with integers are:
|
||||
|
||||
|
||||
|
||||
[h4[_NEAR SORTED DATA WITH 100 000 000 64 bits INTEGERS]]
|
||||
[section:near_sorted Near Sorted Data]
|
||||
[:
|
||||
[h4[_Near Sorted Data With 100 000 000 64 bits Integers]]
|
||||
|
||||
benchmark/single/benchmark_numbers.cpp : This benchmark shows the results obtained with several kind of integers numbers (random, and near
|
||||
sorted).
|
||||
|
||||
@@ -56,7 +56,11 @@ The benchmarks with strings and objects of different sizes are not showed here,
|
||||
|
||||
``
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[section:complex_benchmarks Complex (Several Types)]
|
||||
[:
|
||||
The next results are obtained from more complex benchmarks, not include in the library because they use non free software
|
||||
(If you are interested in their code, contact fjtapia@gmail.com)
|
||||
|
||||
@@ -71,10 +75,10 @@ There are 3 types of benchmarks,
|
||||
The objects are arrays of integers. The heavy comparison sums all the elements in each, and the light comparison uses only the first number of the array.
|
||||
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
[h4[_100 000 000 NUMBERS OF 64 BITS RANDOMLY FILLED]]
|
||||
|
||||
[h4[_100 000 000 Numbers of 64 bits Randomly Filled]]
|
||||
|
||||
|
||||
[*[teletype]
|
||||
@@ -94,7 +98,7 @@ The objects are arrays of integers. The heavy comparison sums all the elements
|
||||
|
||||
``
|
||||
]
|
||||
[h4[_10 000 000 STRINGS RANDOMLY FILLED]]
|
||||
[h4[_10 000 000 Strings Randomly Filled]]
|
||||
|
||||
[*[teletype]
|
||||
``
|
||||
@@ -112,7 +116,7 @@ The objects are arrays of integers. The heavy comparison sums all the elements
|
||||
| | |
|
||||
``
|
||||
]
|
||||
[h4[_OBJECTS RANDOMLY FILLED]]
|
||||
[h4[_Objects Randomly Filled]]
|
||||
[:
|
||||
The objects are arrays of 64 bits numbers
|
||||
|
||||
@@ -145,6 +149,7 @@ They are compared in two ways :
|
||||
|
||||
|
||||
``
|
||||
]]
|
||||
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
||||
@@ -8,14 +8,16 @@
|
||||
=============================================================================/]
|
||||
|
||||
[section:parallel_stable_sort 3.3.- Parallel_stable_sort]
|
||||
|
||||
[section:parallel_description Description]
|
||||
[:
|
||||
This algorithm is based on the [*[@ https://en.wikipedia.org/wiki/Samplesort Samplesort]] algorithm, but uses half of the memory used by samplesort.
|
||||
This is an adaptation of the [*[@https://en.wikipedia.org/wiki/Samplesort Samplesort]] algorithm,
|
||||
using an additional memory a half of the memory used by the data
|
||||
(the original algorithm uses an additional memory as the used by the data).
|
||||
|
||||
It is a highly efficient [*parallel stable sort], optimized for use with many threads.
|
||||
|
||||
|
||||
The design and implementation were done by Francisco Tapia for the Boost Library.
|
||||
|
||||
[h4[_Algorithm Description]]
|
||||
[:
|
||||
[*[teletype]
|
||||
``
|
||||
| | | |
|
||||
@@ -28,7 +30,10 @@ The design and implementation were done by Francisco Tapia for the Boost Library
|
||||
|
||||
You can see their performance in the [*[link sort.parallel.linux_parallel Benchmarks]] chapter
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[section:parallel_programming Programming]
|
||||
[:
|
||||
[h4[_Thread specification]]
|
||||
|
||||
[:
|
||||
@@ -87,7 +92,7 @@ unpredictable.
|
||||
|
||||
]
|
||||
]
|
||||
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
||||
|
||||
|
||||
+11
-3
@@ -12,8 +12,12 @@
|
||||
[:
|
||||
This is a implementation of the [*[@https://en.wikipedia.org/wiki/Samplesort Samplesort]] algorithm by Francisco Tapia for the Boost Library.
|
||||
|
||||
It is a highly efficient [*parallel stable sort], optimized for use with many threads.
|
||||
|
||||
[h4[_Algorithm Description]]
|
||||
The additional memory needed is of the same size than the data
|
||||
]
|
||||
|
||||
[section:sample_description Description]
|
||||
[:
|
||||
|
||||
[*[teletype]
|
||||
@@ -28,8 +32,11 @@ This is a implementation of the [*[@https://en.wikipedia.org/wiki/Samplesort Sam
|
||||
|
||||
You can see their performance in the [*[link sort.parallel.linux_parallel Benchmarks]] chapter
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[h4[_Thread specification]]
|
||||
[section:sample_programming Programming]
|
||||
[:
|
||||
[h4[_Thread Specification]]
|
||||
|
||||
[:
|
||||
This algorithm has an integer parameter indicating the *number of threads* to use in the sorting process,
|
||||
@@ -83,9 +90,10 @@ guarantee the integrity of the objects to sort, but not their relative order. If
|
||||
is generated inside the objects (in the move or in the copy constructor.. ) the results can be
|
||||
unpredictable.
|
||||
]
|
||||
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[endsect]
|
||||
|
||||
|
||||
|
||||
|
||||
+12
-11
@@ -7,25 +7,26 @@
|
||||
http://www.boost.org/LICENSE_1_0.txt
|
||||
=============================================================================/]
|
||||
|
||||
[section:parallel 2.- Single Thread Algorithms]
|
||||
|
||||
[section:single_thread 2.- Single Thread Algorithms]
|
||||
[section:overview 2.0.- Overview]
|
||||
[:
|
||||
|
||||
[h4[_Single Thread Algorithms]]
|
||||
|
||||
[:
|
||||
This table provides a brief description of the single thread algorithms of the library.
|
||||
|
||||
|
||||
[*[teletype]
|
||||
``
|
||||
| | | | Comparison |
|
||||
Algorithm |Stable | Additional memory |Best, average, and worst case | method |
|
||||
------------------+-------+----------------------------+------------------------------+---------------------+
|
||||
spreadsort | no | key_length | N, N sqrt(LogN), min(N logN, N key_length) | Hybrid radix sort |
|
||||
pdqsort | no | Log N | N, N LogN, N LogN | Comparison operator |
|
||||
spinsort | yes | N / 2 | N, N LogN, N LogN | Comparison operator |
|
||||
flat_stable_sort | yes |size of the data / 256 + 8K | N, N LogN, N LogN | Comparison operator |
|
||||
| | | | |
|
||||
| | | | Comparison |
|
||||
Algorithm |Stable | Additional memory | Best, average, and worst case | method |
|
||||
------------------+-------+----------------------------+-----------------------------------------+---------------------+
|
||||
spreadsort | no | key_length | N, Nsqrt(LogN), min(NlogN, Nkey_length) | Hybrid radix sort |
|
||||
pdqsort | no | Log N | N, NLogN, NLogN | Comparison operator |
|
||||
spinsort | yes | N / 2 | N, NLogN, NLogN | Comparison operator |
|
||||
flat_stable_sort | yes |size of the data / 256 + 8K | N, NLogN, NLogN | Comparison operator |
|
||||
| | | | |
|
||||
``
|
||||
]
|
||||
|
||||
@@ -41,7 +42,7 @@ This table provides a brief description of the single thread algorithms of the l
|
||||
]
|
||||
|
||||
]
|
||||
|
||||
[endsect]
|
||||
[include spreadsort.qbk]
|
||||
[include pdqsort.qbk]
|
||||
[include spinsort.qbk]
|
||||
|
||||
+29
-29
@@ -1,29 +1,29 @@
|
||||
[library Boost.Sort
|
||||
[quickbook 1.7]
|
||||
[id sort]
|
||||
[copyright 2014-2017 Steven Ross, Francisco Tapia, Orson Peters]
|
||||
[authors [Ross, Steven] [Tapia, Francisco] [Peters, Orson]]
|
||||
[dirname sort]
|
||||
[license Distributed under the
|
||||
[@http://boost.org/LICENSE_1_0.txt Boost Software License, Version 1.0].
|
||||
]
|
||||
]
|
||||
|
||||
[/ Some composite templates]
|
||||
[template super[x]'''<superscript>'''[x]'''</superscript>''']
|
||||
[template sub[x]'''<subscript>'''[x]'''</subscript>''']
|
||||
[template floor[x]'''⌊'''[x]'''⌋''']
|
||||
[template floorlr[x][lfloor][x][rfloor]]
|
||||
[template ceil[x] '''⌈'''[x]'''⌉''']
|
||||
|
||||
[/ Required for autoindexing]
|
||||
[import ../../../tools/auto_index/include/auto_index_helpers.qbk]
|
||||
[/ Must be first included file!]
|
||||
|
||||
[include introduction.qbk]
|
||||
[include single_thread.qbk]
|
||||
[include parallel.qbk]
|
||||
[include bibliography.qbk]
|
||||
[include gratitude.qbk]
|
||||
|
||||
[xinclude autodoc.xml] [/ Using Doxygen reference documentation.]
|
||||
[library Boost.Sort
|
||||
[quickbook 1.7]
|
||||
[id sort]
|
||||
[copyright 2014-2017 Steven Ross, Francisco Tapia, Orson Peters]
|
||||
[authors [Ross, Steven] [Tapia, Francisco] [Peters, Orson]]
|
||||
[dirname sort]
|
||||
[license Distributed under the
|
||||
[@http://boost.org/LICENSE_1_0.txt Boost Software License, Version 1.0].
|
||||
]
|
||||
]
|
||||
|
||||
[/ Some composite templates]
|
||||
[template super[x]'''<superscript>'''[x]'''</superscript>''']
|
||||
[template sub[x]'''<subscript>'''[x]'''</subscript>''']
|
||||
[template floor[x]'''⌊'''[x]'''⌋''']
|
||||
[template floorlr[x][lfloor][x][rfloor]]
|
||||
[template ceil[x] '''⌈'''[x]'''⌉''']
|
||||
|
||||
[/ Required for autoindexing]
|
||||
[import ../../../tools/auto_index/include/auto_index_helpers.qbk]
|
||||
[/ Must be first included file!]
|
||||
|
||||
[include introduction.qbk]
|
||||
[include single_thread.qbk]
|
||||
[include parallel.qbk]
|
||||
[include bibliography.qbk]
|
||||
[include gratitude.qbk]
|
||||
|
||||
[xinclude autodoc.xml] [/ Using Doxygen reference documentation.]
|
||||
|
||||
+9
-6
@@ -10,9 +10,10 @@
|
||||
|
||||
[section:spinsort 2.3.- spinsort]
|
||||
|
||||
|
||||
[section:spinsort_description Description]
|
||||
[:
|
||||
[h4[_Algorithm Description]]
|
||||
[:
|
||||
|
||||
[*Spinsort] is a new stable sort algorithm, designed and implemented by Francisco Tapia for the Boost Sort Library.
|
||||
|
||||
This algorithm combines several ideas used to optimize other stable sort algorithms.
|
||||
@@ -28,14 +29,15 @@ This algorithm combines several ideas used to optimize other stable sort algorit
|
||||
|
||||
``
|
||||
]
|
||||
|
||||
The algorithm is most efficient when the data are nearly sorted. Many times the new elements are inserted at the end
|
||||
of the sorted elements, or some elements are modified, breaking the order of the elements. In these cases, spinsort
|
||||
is very fast.
|
||||
|
||||
]
|
||||
[endsect] [/section:spinsort_description Description]
|
||||
|
||||
[h4[_Benchmark]]
|
||||
|
||||
[section:spinsort_benchmark Benchmark]
|
||||
[:
|
||||
|
||||
The benchmark with 100000000 64 bits integers, comparing with the std::stable_sort of the GCC 6.3 compiler shows the mentioned characteristics, running on a Intel i7-5820K CPU @ 3.30GH .
|
||||
@@ -69,7 +71,8 @@ The benchmark with 100000000 64 bits integers, comparing with the std::stable_so
|
||||
``
|
||||
]
|
||||
]
|
||||
[h4[_Programming]]
|
||||
[endsect] [/section:spinsort_benchmark Benchmark]
|
||||
[section:spinsort_programming Programming]
|
||||
|
||||
[:
|
||||
You only need to include the file boost/sort/sort.hpp to use spinsort.
|
||||
@@ -95,5 +98,5 @@ This algorithm is [*exception safe], meaning that, the exceptions generated by
|
||||
guarantee the integrity of the objects to sort, but not their relative order. If the exception
|
||||
is generated inside the objects (in the move or copy constructors) the results are undefined.
|
||||
]
|
||||
]
|
||||
[endsect] [/section:spinsort_programming Programming]
|
||||
[endsect]
|
||||
|
||||
+915
-915
File diff suppressed because it is too large
Load Diff
+12
-4
@@ -17,8 +17,11 @@ The benchmark runs over a VirtualBox virtual machine with 8 threads and 16 GB of
|
||||
running over a Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz with 6 cores and 2 threads by core, and 15M of cache.
|
||||
|
||||
The Operating System is Windows 10 64 bits, and the compiler is VC2017
|
||||
]
|
||||
|
||||
[h4[_NEAR SORTED DATA WITH 100 000 000 64 bits INTEGERS]]
|
||||
[section:near_sorted Near Sorted Data]
|
||||
[:
|
||||
[h4[_Near Sorted Data With 100 000 000 64 bits Integers]]
|
||||
|
||||
benchmark/single/benchmark_numbers.cpp : This benchmark shows the results obtained with several kind of integers numbers (random, and near
|
||||
sorted).
|
||||
@@ -54,7 +57,11 @@ The benchmarks with strings and objects of different sizes are not showed here,
|
||||
|
||||
``
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
|
||||
[section:complex_benchmarks Complex (Several Types)]
|
||||
[:
|
||||
The next results are obtained from more complex benchmarks, not include in the library because they use non free SW
|
||||
(If you are interested in the details, contact fjtapia@gmail.com)
|
||||
|
||||
@@ -69,7 +76,7 @@ There are 3 types of benchmarks,
|
||||
The objects are arrays of integers. The heavy comparison sums all the elements in each, and the light comparison uses only the first number of the array.
|
||||
|
||||
]
|
||||
[h4[_100 000 000 NUMBERS OF 64 BITS RANDOMLY FILLED]]
|
||||
[h4[_100 000 000 Numbers of 64 bits Randomly Filled]]
|
||||
|
||||
[*[teletype]
|
||||
``
|
||||
@@ -89,7 +96,7 @@ The objects are arrays of integers. The heavy comparison sums all the elements
|
||||
``
|
||||
]
|
||||
|
||||
[h4[_10 000 000 STRINGS RANDOMLY FILLED]]
|
||||
[h4[_10 000 000 Strings Randomly Filled]]
|
||||
|
||||
[*[teletype]
|
||||
``
|
||||
@@ -109,7 +116,7 @@ The objects are arrays of integers. The heavy comparison sums all the elements
|
||||
``
|
||||
]
|
||||
|
||||
[h4[_OBJECTS RANDOMLY FILLED]]
|
||||
[h4[_Objects Randomly Filled]]
|
||||
[:
|
||||
The objects are arrays of 64 bits numbers
|
||||
|
||||
@@ -145,5 +152,6 @@ They are compared in two ways :
|
||||
]
|
||||
]
|
||||
[endsect]
|
||||
[endsect]
|
||||
|
||||
|
||||
|
||||
+78
-78
@@ -1,78 +1,78 @@
|
||||
// a sorting example that uses the worst-case for conventional MSD radix sorts.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace std;
|
||||
|
||||
#define DATA_TYPE boost::uint64_t
|
||||
|
||||
#define ALR_THRESHOLD 3
|
||||
|
||||
const unsigned max_count = ALR_THRESHOLD - 1;
|
||||
const unsigned bit_shift = detail::rough_log_2_size(max_count) -
|
||||
detail::int_log_mean_bin_size;
|
||||
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1;
|
||||
//Increase this size if too fast to test accurately
|
||||
const unsigned top_splits = 12;
|
||||
|
||||
const DATA_TYPE typed_one = 1;
|
||||
|
||||
void
|
||||
fill_vector(vector<DATA_TYPE> & input, const DATA_TYPE base_value,
|
||||
unsigned remaining_bits)
|
||||
{
|
||||
if (remaining_bits >= radix_threshold) {
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
((typed_one << remaining_bits) - 1));
|
||||
fill_vector(input, base_value << bit_shift, remaining_bits - bit_shift);
|
||||
}
|
||||
else {
|
||||
for (unsigned u = 0; u < max_count; ++u)
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
(rand() % (1 << remaining_bits)));
|
||||
}
|
||||
}
|
||||
|
||||
//Tests spreadsort on the worst-case distribution for standard MSD radix sorts.
|
||||
int main(int, const char **) {
|
||||
vector<DATA_TYPE> input;
|
||||
for (int ii = (1 << top_splits) - 1; ii >= 0; --ii)
|
||||
fill_vector(input, ii, (sizeof(DATA_TYPE) * 8) - top_splits);
|
||||
|
||||
//Run both std::sort and spreadsort
|
||||
for (unsigned u = 0; u < 2; ++u) {
|
||||
vector<DATA_TYPE> array = input;
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (u)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (u)
|
||||
printf("std::sort elapsed time %f\n", elapsed / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", elapsed / CLOCKS_PER_SEC);
|
||||
array.clear();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// a sorting example that uses the worst-case for conventional MSD radix sorts.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace std;
|
||||
|
||||
#define DATA_TYPE boost::uint64_t
|
||||
|
||||
#define ALR_THRESHOLD 3
|
||||
|
||||
const unsigned max_count = ALR_THRESHOLD - 1;
|
||||
const unsigned bit_shift = detail::rough_log_2_size(max_count) -
|
||||
detail::int_log_mean_bin_size;
|
||||
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1;
|
||||
//Increase this size if too fast to test accurately
|
||||
const unsigned top_splits = 12;
|
||||
|
||||
const DATA_TYPE typed_one = 1;
|
||||
|
||||
void
|
||||
fill_vector(vector<DATA_TYPE> & input, const DATA_TYPE base_value,
|
||||
unsigned remaining_bits)
|
||||
{
|
||||
if (remaining_bits >= radix_threshold) {
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
((typed_one << remaining_bits) - 1));
|
||||
fill_vector(input, base_value << bit_shift, remaining_bits - bit_shift);
|
||||
}
|
||||
else {
|
||||
for (unsigned u = 0; u < max_count; ++u)
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
(rand() % (1 << remaining_bits)));
|
||||
}
|
||||
}
|
||||
|
||||
//Tests spreadsort on the worst-case distribution for standard MSD radix sorts.
|
||||
int main(int, const char **) {
|
||||
vector<DATA_TYPE> input;
|
||||
for (int ii = (1 << top_splits) - 1; ii >= 0; --ii)
|
||||
fill_vector(input, ii, (sizeof(DATA_TYPE) * 8) - top_splits);
|
||||
|
||||
//Run both std::sort and spreadsort
|
||||
for (unsigned u = 0; u < 2; ++u) {
|
||||
vector<DATA_TYPE> array = input;
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (u)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (u)
|
||||
printf("std::sort elapsed time %f\n", elapsed / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", elapsed / CLOCKS_PER_SEC);
|
||||
array.clear();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
+91
-91
@@ -1,91 +1,91 @@
|
||||
// spreadsort fully sorted data example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
//Sorts the data once, then times sorting of already-sorted data
|
||||
loopCount += 1;
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) // EOF or failure stops the reading
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else {
|
||||
printf("call\n");
|
||||
//integer_sort(&(array[0]), &(array[0]) + uCount);
|
||||
integer_sort(array.begin(), array.end());
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
if (u)
|
||||
total += elapsed;
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort fully sorted data example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
//Sorts the data once, then times sorting of already-sorted data
|
||||
loopCount += 1;
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) // EOF or failure stops the reading
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else {
|
||||
printf("call\n");
|
||||
//integer_sort(&(array[0]), &(array[0]) + uCount);
|
||||
integer_sort(array.begin(), array.end());
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
if (u)
|
||||
total += elapsed;
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+108
-108
@@ -1,108 +1,108 @@
|
||||
// a sorting example that uses the worst-case distribution for spreadsort.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace std;
|
||||
|
||||
#define DATA_TYPE boost::uint64_t
|
||||
|
||||
#define ALR_THRESHOLD 3
|
||||
|
||||
const unsigned max_count = ALR_THRESHOLD - 1;
|
||||
const unsigned bit_shift = detail::rough_log_2_size(max_count) -
|
||||
detail::int_log_mean_bin_size;
|
||||
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1;
|
||||
|
||||
const DATA_TYPE typed_one = 1;
|
||||
|
||||
void
|
||||
fill_vector(vector<DATA_TYPE> & input, const DATA_TYPE base_value,
|
||||
unsigned remaining_bits, const vector<unsigned> & indices,
|
||||
int index)
|
||||
{
|
||||
if (index < 0) {
|
||||
for (unsigned u = 0; u < max_count; ++u)
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
(rand() % (1 << remaining_bits)));
|
||||
}
|
||||
else {
|
||||
unsigned shift = indices[index];
|
||||
fill_vector(input, (base_value << shift) + ((1 << shift) - 1),
|
||||
remaining_bits - shift, indices, index - 1);
|
||||
fill_vector(input, base_value << shift, remaining_bits - shift, indices,
|
||||
index - 1);
|
||||
}
|
||||
}
|
||||
|
||||
//Generates a random index from 0 up to but not including count.
|
||||
unsigned
|
||||
get_index(unsigned count)
|
||||
{
|
||||
unsigned result = unsigned((rand() % (1 << 16))*uint64_t(count)/(1 << 16));
|
||||
if (result >= count)
|
||||
return count - 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Tests std::sort vs boost::sort::spreadsort on boost::sort's worst distribution.
|
||||
int main(int, const char **) {
|
||||
unsigned total_length = sizeof(DATA_TYPE) * 8;
|
||||
double std_sort_time = 0;
|
||||
double spreadsort_time = 0;
|
||||
for (int repetition = 0; repetition < 10; ++repetition) {
|
||||
vector<DATA_TYPE> input;
|
||||
vector<unsigned> offsets;
|
||||
unsigned bit_length = total_length - radix_threshold;
|
||||
unsigned bit_offset = bit_shift;
|
||||
for (; bit_length >= ++bit_offset; bit_length -= bit_offset)
|
||||
offsets.push_back(bit_offset);
|
||||
for (int ii = (1 << bit_length) - 1; ii >= 0; --ii)
|
||||
fill_vector(input, ii, total_length - bit_length,
|
||||
offsets, offsets.size() - 1);
|
||||
|
||||
//Randomize the inputs slightly so they aren't in reverse-sorted order, for
|
||||
//which std::sort is very fast.
|
||||
for (unsigned u = 0; u < input.size() / 10; ++u)
|
||||
std::swap(input[get_index(input.size())], input[get_index(input.size())]);
|
||||
|
||||
//Run both std::sort and boost::sort::spreadsort.
|
||||
for (unsigned u = 0; u < 2; ++u) {
|
||||
vector<DATA_TYPE> array = input;
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (u)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (u)
|
||||
std_sort_time += elapsed / CLOCKS_PER_SEC;
|
||||
else
|
||||
spreadsort_time += elapsed / CLOCKS_PER_SEC;
|
||||
array.clear();
|
||||
}
|
||||
}
|
||||
|
||||
printf("std::sort elapsed time %f\n", std_sort_time);
|
||||
printf("spreadsort elapsed time %f\n", spreadsort_time);
|
||||
return 0;
|
||||
}
|
||||
// a sorting example that uses the worst-case distribution for spreadsort.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace std;
|
||||
|
||||
#define DATA_TYPE boost::uint64_t
|
||||
|
||||
#define ALR_THRESHOLD 3
|
||||
|
||||
const unsigned max_count = ALR_THRESHOLD - 1;
|
||||
const unsigned bit_shift = detail::rough_log_2_size(max_count) -
|
||||
detail::int_log_mean_bin_size;
|
||||
const unsigned radix_threshold = detail::rough_log_2_size(max_count) + 1;
|
||||
|
||||
const DATA_TYPE typed_one = 1;
|
||||
|
||||
void
|
||||
fill_vector(vector<DATA_TYPE> & input, const DATA_TYPE base_value,
|
||||
unsigned remaining_bits, const vector<unsigned> & indices,
|
||||
int index)
|
||||
{
|
||||
if (index < 0) {
|
||||
for (unsigned u = 0; u < max_count; ++u)
|
||||
input.push_back((base_value << remaining_bits) +
|
||||
(rand() % (1 << remaining_bits)));
|
||||
}
|
||||
else {
|
||||
unsigned shift = indices[index];
|
||||
fill_vector(input, (base_value << shift) + ((1 << shift) - 1),
|
||||
remaining_bits - shift, indices, index - 1);
|
||||
fill_vector(input, base_value << shift, remaining_bits - shift, indices,
|
||||
index - 1);
|
||||
}
|
||||
}
|
||||
|
||||
//Generates a random index from 0 up to but not including count.
|
||||
unsigned
|
||||
get_index(unsigned count)
|
||||
{
|
||||
unsigned result = unsigned((rand() % (1 << 16))*uint64_t(count)/(1 << 16));
|
||||
if (result >= count)
|
||||
return count - 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Tests std::sort vs boost::sort::spreadsort on boost::sort's worst distribution.
|
||||
int main(int, const char **) {
|
||||
unsigned total_length = sizeof(DATA_TYPE) * 8;
|
||||
double std_sort_time = 0;
|
||||
double spreadsort_time = 0;
|
||||
for (int repetition = 0; repetition < 10; ++repetition) {
|
||||
vector<DATA_TYPE> input;
|
||||
vector<unsigned> offsets;
|
||||
unsigned bit_length = total_length - radix_threshold;
|
||||
unsigned bit_offset = bit_shift;
|
||||
for (; bit_length >= ++bit_offset; bit_length -= bit_offset)
|
||||
offsets.push_back(bit_offset);
|
||||
for (int ii = (1 << bit_length) - 1; ii >= 0; --ii)
|
||||
fill_vector(input, ii, total_length - bit_length,
|
||||
offsets, offsets.size() - 1);
|
||||
|
||||
//Randomize the inputs slightly so they aren't in reverse-sorted order, for
|
||||
//which std::sort is very fast.
|
||||
for (unsigned u = 0; u < input.size() / 10; ++u)
|
||||
std::swap(input[get_index(input.size())], input[get_index(input.size())]);
|
||||
|
||||
//Run both std::sort and boost::sort::spreadsort.
|
||||
for (unsigned u = 0; u < 2; ++u) {
|
||||
vector<DATA_TYPE> array = input;
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (u)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (u)
|
||||
std_sort_time += elapsed / CLOCKS_PER_SEC;
|
||||
else
|
||||
spreadsort_time += elapsed / CLOCKS_PER_SEC;
|
||||
array.clear();
|
||||
}
|
||||
}
|
||||
|
||||
printf("std::sort elapsed time %f\n", std_sort_time);
|
||||
printf("spreadsort elapsed time %f\n", spreadsort_time);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+69
-69
@@ -1,69 +1,69 @@
|
||||
// a random number generator supporting different distributions.
|
||||
//
|
||||
// Copyright Steven Ross 2009.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <stdio.h>
|
||||
#include "stdlib.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <boost/random.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
|
||||
int main(int argc, const char ** argv) {
|
||||
//Always seed with the same value, to get the same results
|
||||
srand(1);
|
||||
//defaults
|
||||
int mod_shift = 32;
|
||||
unsigned count = 1000000;
|
||||
//Reading in user arguments
|
||||
if (argc > 2)
|
||||
count = atoi(argv[2]);
|
||||
if (argc > 1)
|
||||
mod_shift = atoi(argv[1]) - 1;
|
||||
std::ofstream ofile;
|
||||
ofile.open("input.txt", std::ios_base::out | std::ios_base::binary |
|
||||
std::ios_base::trunc);
|
||||
if (ofile.bad()) {
|
||||
printf("could not open input.txt for writing!\n");
|
||||
return 1;
|
||||
}
|
||||
int min_int = (numeric_limits<int>::min)();
|
||||
int max_int = (numeric_limits<int>::max)();
|
||||
if (mod_shift < 31 && mod_shift >= 0) {
|
||||
max_int %= 1 << mod_shift;
|
||||
if (-max_int > min_int)
|
||||
min_int = -max_int;
|
||||
}
|
||||
std::vector<int> result;
|
||||
result.resize(count);
|
||||
mt19937 rng;
|
||||
if (argc > 3 && (string(argv[3]) == "-normal")) {
|
||||
normal_distribution<> everything(0, max_int/4);
|
||||
variate_generator<mt19937&,normal_distribution<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
else if (argc > 3 && (string(argv[3]) == "-lognormal")) {
|
||||
lognormal_distribution<> everything(max_int/2, max_int/4);
|
||||
variate_generator<mt19937&,lognormal_distribution<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
else {
|
||||
uniform_int<> everything(min_int, max_int);
|
||||
variate_generator<mt19937&,uniform_int<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
ofile.write(reinterpret_cast<char *>(&(result[0])), result.size() *
|
||||
sizeof(int));
|
||||
ofile.close();
|
||||
return 0;
|
||||
}
|
||||
// a random number generator supporting different distributions.
|
||||
//
|
||||
// Copyright Steven Ross 2009.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <stdio.h>
|
||||
#include "stdlib.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <boost/random.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
|
||||
int main(int argc, const char ** argv) {
|
||||
//Always seed with the same value, to get the same results
|
||||
srand(1);
|
||||
//defaults
|
||||
int mod_shift = 32;
|
||||
unsigned count = 1000000;
|
||||
//Reading in user arguments
|
||||
if (argc > 2)
|
||||
count = atoi(argv[2]);
|
||||
if (argc > 1)
|
||||
mod_shift = atoi(argv[1]) - 1;
|
||||
std::ofstream ofile;
|
||||
ofile.open("input.txt", std::ios_base::out | std::ios_base::binary |
|
||||
std::ios_base::trunc);
|
||||
if (ofile.bad()) {
|
||||
printf("could not open input.txt for writing!\n");
|
||||
return 1;
|
||||
}
|
||||
int min_int = (numeric_limits<int>::min)();
|
||||
int max_int = (numeric_limits<int>::max)();
|
||||
if (mod_shift < 31 && mod_shift >= 0) {
|
||||
max_int %= 1 << mod_shift;
|
||||
if (-max_int > min_int)
|
||||
min_int = -max_int;
|
||||
}
|
||||
std::vector<int> result;
|
||||
result.resize(count);
|
||||
mt19937 rng;
|
||||
if (argc > 3 && (string(argv[3]) == "-normal")) {
|
||||
normal_distribution<> everything(0, max_int/4);
|
||||
variate_generator<mt19937&,normal_distribution<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
else if (argc > 3 && (string(argv[3]) == "-lognormal")) {
|
||||
lognormal_distribution<> everything(max_int/2, max_int/4);
|
||||
variate_generator<mt19937&,lognormal_distribution<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
else {
|
||||
uniform_int<> everything(min_int, max_int);
|
||||
variate_generator<mt19937&,uniform_int<> > gen(rng, everything);
|
||||
generate(result.begin(), result.end(), gen);
|
||||
}
|
||||
ofile.write(reinterpret_cast<char *>(&(result[0])), result.size() *
|
||||
sizeof(int));
|
||||
ofile.close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+101
-101
@@ -1,101 +1,101 @@
|
||||
// Example of sorting a struct using a case-insensitive string key.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return boost::algorithm::ilexicographical_compare(x.a, y.a);
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return toupper(x.a[offset]);
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// Example of sorting a struct using a case-insensitive string key.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return boost::algorithm::ilexicographical_compare(x.a, y.a);
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return toupper(x.a[offset]);
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+101
-101
@@ -1,101 +1,101 @@
|
||||
// Example of sorting structs with a string key and indexing functors.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
inline bool operator<(const DATA_TYPE &y) const { return a < y.a;}
|
||||
};
|
||||
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end());
|
||||
} else {
|
||||
//[bracket_1
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize());
|
||||
//] [/bracket_1]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
ofile << array[u].a << "\n";
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// Example of sorting structs with a string key and indexing functors.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
inline bool operator<(const DATA_TYPE &y) const { return a < y.a;}
|
||||
};
|
||||
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end());
|
||||
} else {
|
||||
//[bracket_1
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize());
|
||||
//] [/bracket_1]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
ofile << array[u].a << "\n";
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+105
-105
@@ -1,105 +1,105 @@
|
||||
// spreadsort double sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE double
|
||||
#define CAST_TYPE boost::int64_t
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Using this to support compilers that don't support 64-bit constants
|
||||
CAST_TYPE exponent_mask = 0x7ff00000;
|
||||
exponent_mask <<= 32;
|
||||
CAST_TYPE top_exponent_bit = 0x40000000;
|
||||
top_exponent_bit <<= 32;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<DATA_TYPE, CAST_TYPE>(array[v]) & exponent_mask)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = top_exponent_bit |
|
||||
float_mem_cast<DATA_TYPE, CAST_TYPE>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//float_sort(&(array[0]), &(array[0]) + uCount);
|
||||
float_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort double sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE double
|
||||
#define CAST_TYPE boost::int64_t
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Using this to support compilers that don't support 64-bit constants
|
||||
CAST_TYPE exponent_mask = 0x7ff00000;
|
||||
exponent_mask <<= 32;
|
||||
CAST_TYPE top_exponent_bit = 0x40000000;
|
||||
top_exponent_bit <<= 32;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<DATA_TYPE, CAST_TYPE>(array[v]) & exponent_mask)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = top_exponent_bit |
|
||||
float_mem_cast<DATA_TYPE, CAST_TYPE>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//float_sort(&(array[0]), &(array[0]) + uCount);
|
||||
float_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+138
-138
@@ -1,138 +1,138 @@
|
||||
// spreadsort float functor sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[float_functor_types
|
||||
#define CAST_TYPE int
|
||||
#define KEY_TYPE float
|
||||
//] [/float_functor_types]
|
||||
|
||||
|
||||
//[float_functor_datatypes
|
||||
struct DATA_TYPE {
|
||||
KEY_TYPE key;
|
||||
std::string data;
|
||||
};
|
||||
//] [/float_functor_datatypes]
|
||||
|
||||
|
||||
//[float_functor_rightshift
|
||||
// Casting to an integer before bitshifting
|
||||
struct rightshift {
|
||||
int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
|
||||
}
|
||||
};
|
||||
//] [/float_functor_rightshift]
|
||||
|
||||
//[float_functor_lessthan
|
||||
struct lessthan {
|
||||
bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.key < y.key;
|
||||
}
|
||||
};
|
||||
//] [/float_functor_lessthan]
|
||||
|
||||
// Pass in an argument to test std::sort
|
||||
// Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
// identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
//Checking for denormalized numbers; float_sort looks too fast on them.
|
||||
if (!(float_mem_cast<KEY_TYPE, CAST_TYPE>(array[v].key) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 |
|
||||
float_mem_cast<KEY_TYPE, CAST_TYPE>(array[v].key);
|
||||
memcpy(&(array[v].key), &temp, sizeof(KEY_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v].key < 0.0) && !(0.0 < array[v].key))
|
||||
array[v].key = 0.0;
|
||||
//Adding the data, in this case a string
|
||||
std::stringstream intstr;
|
||||
intstr << array[v].key;
|
||||
array[v].data = intstr.str();
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
float_sort(array.begin(), array.end(), rightshift(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
ofile << array[v].data;
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort float functor sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[float_functor_types
|
||||
#define CAST_TYPE int
|
||||
#define KEY_TYPE float
|
||||
//] [/float_functor_types]
|
||||
|
||||
|
||||
//[float_functor_datatypes
|
||||
struct DATA_TYPE {
|
||||
KEY_TYPE key;
|
||||
std::string data;
|
||||
};
|
||||
//] [/float_functor_datatypes]
|
||||
|
||||
|
||||
//[float_functor_rightshift
|
||||
// Casting to an integer before bitshifting
|
||||
struct rightshift {
|
||||
int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
|
||||
}
|
||||
};
|
||||
//] [/float_functor_rightshift]
|
||||
|
||||
//[float_functor_lessthan
|
||||
struct lessthan {
|
||||
bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.key < y.key;
|
||||
}
|
||||
};
|
||||
//] [/float_functor_lessthan]
|
||||
|
||||
// Pass in an argument to test std::sort
|
||||
// Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
// identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
//Checking for denormalized numbers; float_sort looks too fast on them.
|
||||
if (!(float_mem_cast<KEY_TYPE, CAST_TYPE>(array[v].key) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 |
|
||||
float_mem_cast<KEY_TYPE, CAST_TYPE>(array[v].key);
|
||||
memcpy(&(array[v].key), &temp, sizeof(KEY_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v].key < 0.0) && !(0.0 < array[v].key))
|
||||
array[v].key = 0.0;
|
||||
//Adding the data, in this case a string
|
||||
std::stringstream intstr;
|
||||
intstr << array[v].key;
|
||||
array[v].data = intstr.str();
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
float_sort(array.begin(), array.end(), rightshift(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
ofile << array[v].data;
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+100
-100
@@ -1,100 +1,100 @@
|
||||
// spreadsort float sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE float
|
||||
#define CAST_TYPE int
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<float, int>(array[v]) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 | float_mem_cast<float, int>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//boost::sort::spreadsort::spreadsort(&(array[0]), &(array[0]) + uCount);
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort float sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE float
|
||||
#define CAST_TYPE int
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<float, int>(array[v]) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 | float_mem_cast<float, int>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//boost::sort::spreadsort::spreadsort(&(array[0]), &(array[0]) + uCount);
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+192
-192
@@ -1,192 +1,192 @@
|
||||
// This example shows how to sort structs using complex multiple part keys using
|
||||
// string_sort.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[generalized_functors
|
||||
struct DATA_TYPE {
|
||||
time_t birth;
|
||||
float net_worth;
|
||||
string first_name;
|
||||
string last_name;
|
||||
};
|
||||
|
||||
static const int birth_size = sizeof(time_t);
|
||||
static const int first_name_offset = birth_size + sizeof(float);
|
||||
static const boost::uint64_t base_mask = 0xff;
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
if (x.birth != y.birth) {
|
||||
return x.birth < y.birth;
|
||||
}
|
||||
if (x.net_worth != y.net_worth) {
|
||||
return x.net_worth < y.net_worth;
|
||||
}
|
||||
if (x.first_name != y.first_name) {
|
||||
return x.first_name < y.first_name;
|
||||
}
|
||||
return x.last_name < y.last_name;
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
// Sort date as a signed int, returning the appropriate byte.
|
||||
if (offset < birth_size) {
|
||||
const int bit_shift = 8 * (birth_size - offset - 1);
|
||||
unsigned char result = (x.birth & (base_mask << bit_shift)) >> bit_shift;
|
||||
// Handling the sign bit. Unnecessary if the data is always positive.
|
||||
if (offset == 0) {
|
||||
return result ^ 128;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Sort a signed float. This requires reversing the order of negatives
|
||||
// because of the way floats are represented in bits.
|
||||
if (offset < first_name_offset) {
|
||||
const int bit_shift = 8 * (first_name_offset - offset - 1);
|
||||
unsigned key = float_mem_cast<float, unsigned>(x.net_worth);
|
||||
unsigned char result = (key & (base_mask << bit_shift)) >> bit_shift;
|
||||
// Handling the sign.
|
||||
if (x.net_worth < 0) {
|
||||
return 255 - result;
|
||||
}
|
||||
// Increasing positives so they are higher than negatives.
|
||||
if (offset == birth_size) {
|
||||
return 128 + result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Sort a string that is before the end. This approach supports embedded
|
||||
// nulls. If embedded nulls are not required, then just delete the "* 2"
|
||||
// and the inside of the following if just becomes:
|
||||
// return x.first_name[offset - first_name_offset];
|
||||
const unsigned first_name_end_offset =
|
||||
first_name_offset + x.first_name.size() * 2;
|
||||
if (offset < first_name_end_offset) {
|
||||
int char_offset = offset - first_name_offset;
|
||||
// This signals that the string continues.
|
||||
if (!(char_offset & 1)) {
|
||||
return 1;
|
||||
}
|
||||
return x.first_name[char_offset >> 1];
|
||||
}
|
||||
|
||||
// This signals that the string has ended, so that shorter strings come
|
||||
// before longer ones.
|
||||
if (offset == first_name_end_offset) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// The final string needs no special consideration.
|
||||
return x.last_name[offset - first_name_end_offset - 1];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const {
|
||||
return first_name_offset + x.first_name.size() * 2 + 1 +
|
||||
x.last_name.size();
|
||||
}
|
||||
};
|
||||
//] [/generalized_functors]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Read in the data.
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval.first_name;
|
||||
indata >> inval.last_name;
|
||||
indata.read(reinterpret_cast<char *>(&(inval.birth)), birth_size);
|
||||
indata.read(reinterpret_cast<char *>(&(inval.net_worth)), sizeof(float));
|
||||
// Handling nan.
|
||||
if (inval.net_worth != inval.net_worth) {
|
||||
inval.net_worth = 0;
|
||||
}
|
||||
if (indata.eof())
|
||||
break;
|
||||
array.push_back(inval);
|
||||
}
|
||||
indata.close();
|
||||
|
||||
// Sort the data.
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
} else {
|
||||
//[generalized_functors_call
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
//] [/generalized_functors_call]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort) {
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
} else {
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
}
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].birth << " " << array[u].net_worth << " "
|
||||
<< array[u].first_name << " " << array[u].last_name << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort) {
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
} else {
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// This example shows how to sort structs using complex multiple part keys using
|
||||
// string_sort.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[generalized_functors
|
||||
struct DATA_TYPE {
|
||||
time_t birth;
|
||||
float net_worth;
|
||||
string first_name;
|
||||
string last_name;
|
||||
};
|
||||
|
||||
static const int birth_size = sizeof(time_t);
|
||||
static const int first_name_offset = birth_size + sizeof(float);
|
||||
static const boost::uint64_t base_mask = 0xff;
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
if (x.birth != y.birth) {
|
||||
return x.birth < y.birth;
|
||||
}
|
||||
if (x.net_worth != y.net_worth) {
|
||||
return x.net_worth < y.net_worth;
|
||||
}
|
||||
if (x.first_name != y.first_name) {
|
||||
return x.first_name < y.first_name;
|
||||
}
|
||||
return x.last_name < y.last_name;
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
// Sort date as a signed int, returning the appropriate byte.
|
||||
if (offset < birth_size) {
|
||||
const int bit_shift = 8 * (birth_size - offset - 1);
|
||||
unsigned char result = (x.birth & (base_mask << bit_shift)) >> bit_shift;
|
||||
// Handling the sign bit. Unnecessary if the data is always positive.
|
||||
if (offset == 0) {
|
||||
return result ^ 128;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Sort a signed float. This requires reversing the order of negatives
|
||||
// because of the way floats are represented in bits.
|
||||
if (offset < first_name_offset) {
|
||||
const int bit_shift = 8 * (first_name_offset - offset - 1);
|
||||
unsigned key = float_mem_cast<float, unsigned>(x.net_worth);
|
||||
unsigned char result = (key & (base_mask << bit_shift)) >> bit_shift;
|
||||
// Handling the sign.
|
||||
if (x.net_worth < 0) {
|
||||
return 255 - result;
|
||||
}
|
||||
// Increasing positives so they are higher than negatives.
|
||||
if (offset == birth_size) {
|
||||
return 128 + result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Sort a string that is before the end. This approach supports embedded
|
||||
// nulls. If embedded nulls are not required, then just delete the "* 2"
|
||||
// and the inside of the following if just becomes:
|
||||
// return x.first_name[offset - first_name_offset];
|
||||
const unsigned first_name_end_offset =
|
||||
first_name_offset + x.first_name.size() * 2;
|
||||
if (offset < first_name_end_offset) {
|
||||
int char_offset = offset - first_name_offset;
|
||||
// This signals that the string continues.
|
||||
if (!(char_offset & 1)) {
|
||||
return 1;
|
||||
}
|
||||
return x.first_name[char_offset >> 1];
|
||||
}
|
||||
|
||||
// This signals that the string has ended, so that shorter strings come
|
||||
// before longer ones.
|
||||
if (offset == first_name_end_offset) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// The final string needs no special consideration.
|
||||
return x.last_name[offset - first_name_end_offset - 1];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const {
|
||||
return first_name_offset + x.first_name.size() * 2 + 1 +
|
||||
x.last_name.size();
|
||||
}
|
||||
};
|
||||
//] [/generalized_functors]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Read in the data.
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval.first_name;
|
||||
indata >> inval.last_name;
|
||||
indata.read(reinterpret_cast<char *>(&(inval.birth)), birth_size);
|
||||
indata.read(reinterpret_cast<char *>(&(inval.net_worth)), sizeof(float));
|
||||
// Handling nan.
|
||||
if (inval.net_worth != inval.net_worth) {
|
||||
inval.net_worth = 0;
|
||||
}
|
||||
if (indata.eof())
|
||||
break;
|
||||
array.push_back(inval);
|
||||
}
|
||||
indata.close();
|
||||
|
||||
// Sort the data.
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
} else {
|
||||
//[generalized_functors_call
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
//] [/generalized_functors_call]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort) {
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
} else {
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
}
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].birth << " " << array[u].net_worth << " "
|
||||
<< array[u].first_name << " " << array[u].last_name << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort) {
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
} else {
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
+93
-93
@@ -1,93 +1,93 @@
|
||||
// spreadsort 64-bit integer sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[int64bit_1
|
||||
#define DATA_TYPE boost::int64_t
|
||||
//] [/int64bit_1]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//boost::sort::spreadsort::spreadsort(&(array[0]), &(array[0]) + uCount);
|
||||
//[int64bit_2
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
//] [/int64bit_2]
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort 64-bit integer sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
//[int64bit_1
|
||||
#define DATA_TYPE boost::int64_t
|
||||
//] [/int64bit_1]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//boost::sort::spreadsort::spreadsort(&(array[0]), &(array[0]) + uCount);
|
||||
//[int64bit_2
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
//] [/int64bit_2]
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+107
-107
@@ -1,107 +1,107 @@
|
||||
// spreadsort key and data sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
int key;
|
||||
std::string data;
|
||||
};
|
||||
//functor example
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.key < y.key;
|
||||
}
|
||||
};
|
||||
|
||||
struct rightshift {
|
||||
inline int operator()(const DATA_TYPE &x, const unsigned offset) {
|
||||
return x.key >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uSize = sizeof(int);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
array.reserve(length/uSize);
|
||||
unsigned uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v++ < uCount) { // EOF or failure stops the reading
|
||||
DATA_TYPE element;
|
||||
input.read(reinterpret_cast<char *>(&(element.key)), sizeof(element.key));
|
||||
std::stringstream intstr;
|
||||
intstr << element.key;
|
||||
element.data = intstr.str();
|
||||
array.push_back(element);
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
integer_sort(array.begin(), array.end(), rightshift(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
ofile << array[v].data;
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort key and data sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
int key;
|
||||
std::string data;
|
||||
};
|
||||
//functor example
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.key < y.key;
|
||||
}
|
||||
};
|
||||
|
||||
struct rightshift {
|
||||
inline int operator()(const DATA_TYPE &x, const unsigned offset) {
|
||||
return x.key >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uSize = sizeof(int);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
array.reserve(length/uSize);
|
||||
unsigned uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v++ < uCount) { // EOF or failure stops the reading
|
||||
DATA_TYPE element;
|
||||
input.read(reinterpret_cast<char *>(&(element.key)), sizeof(element.key));
|
||||
std::stringstream intstr;
|
||||
intstr << element.key;
|
||||
element.data = intstr.str();
|
||||
array.push_back(element);
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
else
|
||||
integer_sort(array.begin(), array.end(), rightshift(), lessthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v].key)),
|
||||
sizeof(array[v].key));
|
||||
ofile << array[v].data;
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+100
-100
@@ -1,100 +1,100 @@
|
||||
// spreadsort on a mostly sorted array example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
unsigned
|
||||
get_index(unsigned count)
|
||||
{
|
||||
unsigned result = unsigned((rand() % (1 << 16))*uint64_t(count)/(1 << 16));
|
||||
if (result >= count || result < 0)
|
||||
result = count - 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
srand(1);
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
//Sorts the data once, then times sorting of already-sorted data
|
||||
loopCount += 1;
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) // EOF or failure stops the reading
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < uCount/10; ++v)
|
||||
std::swap(array[get_index(uCount)], array[get_index(uCount)]);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//integer_sort(&(array[0]), &(array[0]) + uCount);
|
||||
integer_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
if (u)
|
||||
total += elapsed;
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort on a mostly sorted array example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
unsigned
|
||||
get_index(unsigned count)
|
||||
{
|
||||
unsigned result = unsigned((rand() % (1 << 16))*uint64_t(count)/(1 << 16));
|
||||
if (result >= count || result < 0)
|
||||
result = count - 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
srand(1);
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
//Sorts the data once, then times sorting of already-sorted data
|
||||
loopCount += 1;
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) // EOF or failure stops the reading
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < uCount/10; ++v)
|
||||
std::swap(array[get_index(uCount)], array[get_index(uCount)]);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//integer_sort(&(array[0]), &(array[0]) + uCount);
|
||||
integer_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
if (u)
|
||||
total += elapsed;
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+115
-115
@@ -1,115 +1,115 @@
|
||||
// Benchmark for integer sorting speed across parallel threads.
|
||||
//
|
||||
// Copyright Steven Ross 2014
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
bool is_sorted(const std::vector<DATA_TYPE> &array) {
|
||||
for (unsigned u = 0; u + 1 < array.size(); ++u) {
|
||||
if (array[u] > array[u + 1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void sort_loop(const std::vector<DATA_TYPE> &base_array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
std::vector<DATA_TYPE> array(base_array);
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < base_array.size(); ++v) {
|
||||
array[v] = base_array[v];
|
||||
}
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
if (!is_sorted(array)) {
|
||||
fprintf(stderr, "sort failed!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
int threadCount = -1;
|
||||
unsigned loopCount = 0;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else if(threadCount < 0)
|
||||
threadCount = atoi(argv[u]);
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
if (!loopCount) {
|
||||
loopCount = 1;
|
||||
}
|
||||
printf("threads: %d loops: %d\n", threadCount, loopCount);
|
||||
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
std::vector<DATA_TYPE> base_array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
base_array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(base_array[v++])), uSize );
|
||||
input.close();
|
||||
if (v < uCount)
|
||||
base_array.resize(v);
|
||||
//Run multiple loops, if requested
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
std::vector<boost::thread *> workers;
|
||||
start = clock();
|
||||
if (threadCount == 0) {
|
||||
sort_loop(base_array, stdSort, loopCount);
|
||||
} else {
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers.push_back(new boost::thread(sort_loop, base_array, stdSort,
|
||||
loopCount));
|
||||
}
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers[i]->join();
|
||||
delete workers[i];
|
||||
}
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
|
||||
if (stdSort)
|
||||
printf("std::sort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
else
|
||||
printf("spreadsort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
return 0;
|
||||
}
|
||||
// Benchmark for integer sorting speed across parallel threads.
|
||||
//
|
||||
// Copyright Steven Ross 2014
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
bool is_sorted(const std::vector<DATA_TYPE> &array) {
|
||||
for (unsigned u = 0; u + 1 < array.size(); ++u) {
|
||||
if (array[u] > array[u + 1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void sort_loop(const std::vector<DATA_TYPE> &base_array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
std::vector<DATA_TYPE> array(base_array);
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < base_array.size(); ++v) {
|
||||
array[v] = base_array[v];
|
||||
}
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
if (!is_sorted(array)) {
|
||||
fprintf(stderr, "sort failed!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
int threadCount = -1;
|
||||
unsigned loopCount = 0;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else if(threadCount < 0)
|
||||
threadCount = atoi(argv[u]);
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
if (!loopCount) {
|
||||
loopCount = 1;
|
||||
}
|
||||
printf("threads: %d loops: %d\n", threadCount, loopCount);
|
||||
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
std::vector<DATA_TYPE> base_array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
base_array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(base_array[v++])), uSize );
|
||||
input.close();
|
||||
if (v < uCount)
|
||||
base_array.resize(v);
|
||||
//Run multiple loops, if requested
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
std::vector<boost::thread *> workers;
|
||||
start = clock();
|
||||
if (threadCount == 0) {
|
||||
sort_loop(base_array, stdSort, loopCount);
|
||||
} else {
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers.push_back(new boost::thread(sort_loop, base_array, stdSort,
|
||||
loopCount));
|
||||
}
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers[i]->join();
|
||||
delete workers[i];
|
||||
}
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
|
||||
if (stdSort)
|
||||
printf("std::sort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
else
|
||||
printf("spreadsort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+143
-143
@@ -1,143 +1,143 @@
|
||||
// Benchmark for integer sorting speed across parallel threads.
|
||||
//
|
||||
// Copyright Steven Ross 2014
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/random/mersenne_twister.hpp>
|
||||
#include <boost/random/uniform_int_distribution.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
static bool is_sorted(const std::vector<DATA_TYPE> &array) {
|
||||
for (unsigned u = 0; u + 1 < array.size(); ++u) {
|
||||
if (array[u] > array[u + 1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void sort_core(std::vector<DATA_TYPE> &array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
if (!is_sorted(array)) {
|
||||
fprintf(stderr, "sort failed!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void sort_loop(const std::vector<DATA_TYPE> &base_array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
std::vector<DATA_TYPE> array(base_array);
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < base_array.size(); ++v) {
|
||||
array[v] = base_array[v];
|
||||
}
|
||||
sort_core(array, stdSort, loopCount);
|
||||
}
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
int constant_to_random_ratio = -1;
|
||||
int threadCount = -1;
|
||||
unsigned loopCount = 0;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else if(threadCount < 0)
|
||||
threadCount = atoi(argv[u]);
|
||||
else if (!loopCount)
|
||||
loopCount = atoi(argv[u]);
|
||||
else
|
||||
constant_to_random_ratio = atoi(argv[u]);
|
||||
}
|
||||
if (!loopCount) {
|
||||
loopCount = 1;
|
||||
}
|
||||
printf("threads: %d loops: %d\n", threadCount, loopCount);
|
||||
|
||||
std::vector<DATA_TYPE> base_array;
|
||||
if (constant_to_random_ratio >= 0) {
|
||||
//Test for random data with gaps of identical data.
|
||||
random::mt19937 generator;
|
||||
random::uniform_int_distribution<int> distribution(0,255);
|
||||
const int constant_to_random_count = 1000000;
|
||||
const int string_length = 1000;
|
||||
for (int i = 0; i < constant_to_random_count; ++i) {
|
||||
DATA_TYPE temp(string_length, 'x'); // fill with default character.
|
||||
for (int j = constant_to_random_ratio; j < string_length;) {
|
||||
int val = distribution(generator);
|
||||
temp[j] = val;
|
||||
j += (val * constant_to_random_ratio)/128 + 1;
|
||||
}
|
||||
base_array.push_back(temp);
|
||||
}
|
||||
} else {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval;
|
||||
base_array.push_back(inval);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the input
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
std::vector<boost::thread *> workers;
|
||||
start = clock();
|
||||
if (threadCount == 0) {
|
||||
if (loopCount > 1) {
|
||||
sort_loop(base_array, stdSort, loopCount);
|
||||
} else {
|
||||
sort_core(base_array, stdSort, loopCount);
|
||||
}
|
||||
threadCount = 1;
|
||||
} else {
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers.push_back(new boost::thread(sort_loop, base_array, stdSort,
|
||||
loopCount));
|
||||
}
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers[i]->join();
|
||||
delete workers[i];
|
||||
}
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
|
||||
printf("for %lu strings\n", base_array.size());
|
||||
if (stdSort)
|
||||
printf("std::sort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
else
|
||||
printf("spreadsort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
return 0;
|
||||
}
|
||||
// Benchmark for integer sorting speed across parallel threads.
|
||||
//
|
||||
// Copyright Steven Ross 2014
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/random/mersenne_twister.hpp>
|
||||
#include <boost/random/uniform_int_distribution.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
static bool is_sorted(const std::vector<DATA_TYPE> &array) {
|
||||
for (unsigned u = 0; u + 1 < array.size(); ++u) {
|
||||
if (array[u] > array[u + 1]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void sort_core(std::vector<DATA_TYPE> &array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
if (!is_sorted(array)) {
|
||||
fprintf(stderr, "sort failed!\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void sort_loop(const std::vector<DATA_TYPE> &base_array, bool stdSort,
|
||||
unsigned loopCount) {
|
||||
std::vector<DATA_TYPE> array(base_array);
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
for (unsigned v = 0; v < base_array.size(); ++v) {
|
||||
array[v] = base_array[v];
|
||||
}
|
||||
sort_core(array, stdSort, loopCount);
|
||||
}
|
||||
}
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
int constant_to_random_ratio = -1;
|
||||
int threadCount = -1;
|
||||
unsigned loopCount = 0;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else if(threadCount < 0)
|
||||
threadCount = atoi(argv[u]);
|
||||
else if (!loopCount)
|
||||
loopCount = atoi(argv[u]);
|
||||
else
|
||||
constant_to_random_ratio = atoi(argv[u]);
|
||||
}
|
||||
if (!loopCount) {
|
||||
loopCount = 1;
|
||||
}
|
||||
printf("threads: %d loops: %d\n", threadCount, loopCount);
|
||||
|
||||
std::vector<DATA_TYPE> base_array;
|
||||
if (constant_to_random_ratio >= 0) {
|
||||
//Test for random data with gaps of identical data.
|
||||
random::mt19937 generator;
|
||||
random::uniform_int_distribution<int> distribution(0,255);
|
||||
const int constant_to_random_count = 1000000;
|
||||
const int string_length = 1000;
|
||||
for (int i = 0; i < constant_to_random_count; ++i) {
|
||||
DATA_TYPE temp(string_length, 'x'); // fill with default character.
|
||||
for (int j = constant_to_random_ratio; j < string_length;) {
|
||||
int val = distribution(generator);
|
||||
temp[j] = val;
|
||||
j += (val * constant_to_random_ratio)/128 + 1;
|
||||
}
|
||||
base_array.push_back(temp);
|
||||
}
|
||||
} else {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval;
|
||||
base_array.push_back(inval);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the input
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
std::vector<boost::thread *> workers;
|
||||
start = clock();
|
||||
if (threadCount == 0) {
|
||||
if (loopCount > 1) {
|
||||
sort_loop(base_array, stdSort, loopCount);
|
||||
} else {
|
||||
sort_core(base_array, stdSort, loopCount);
|
||||
}
|
||||
threadCount = 1;
|
||||
} else {
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers.push_back(new boost::thread(sort_loop, base_array, stdSort,
|
||||
loopCount));
|
||||
}
|
||||
for (int i = 0; i < threadCount; ++i) {
|
||||
workers[i]->join();
|
||||
delete workers[i];
|
||||
}
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
|
||||
printf("for %lu strings\n", base_array.size());
|
||||
if (stdSort)
|
||||
printf("std::sort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
else
|
||||
printf("spreadsort clock time %lf\n", elapsed/CLOCKS_PER_SEC/threadCount);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+69
-69
@@ -1,69 +1,69 @@
|
||||
// flexible random number generator providing multiple distributions.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/random/mersenne_twister.hpp>
|
||||
#include <boost/random/uniform_int_distribution.hpp>
|
||||
#include <stdio.h>
|
||||
#include "stdlib.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost;
|
||||
|
||||
int main(int argc, const char ** argv) {
|
||||
random::mt19937 generator;
|
||||
random::uniform_int_distribution<unsigned> distribution;
|
||||
//defaults
|
||||
unsigned high_shift = 16;
|
||||
unsigned low_shift = 16;
|
||||
unsigned count = 1000000;
|
||||
//Reading in user arguments
|
||||
if (argc > 1)
|
||||
high_shift = atoi(argv[1]);
|
||||
if (argc > 2)
|
||||
low_shift = atoi(argv[2]);
|
||||
if (argc > 3)
|
||||
count = atoi(argv[3]);
|
||||
if (high_shift > 16)
|
||||
high_shift = 16;
|
||||
if (low_shift > 16)
|
||||
low_shift = 16;
|
||||
std::ofstream ofile;
|
||||
ofile.open("input.txt", std::ios_base::out | std::ios_base::binary |
|
||||
std::ios_base::trunc);
|
||||
if (ofile.bad()) {
|
||||
printf("could not open input.txt for writing!\n");
|
||||
return 1;
|
||||
}
|
||||
//buffering file output for speed
|
||||
unsigned uDivideFactor = 1000;
|
||||
//Skipping buffering for small files
|
||||
if (count < uDivideFactor * 100)
|
||||
uDivideFactor = count;
|
||||
unsigned * pNumbers = static_cast<unsigned *>(malloc(uDivideFactor *
|
||||
sizeof(unsigned)));
|
||||
//Generating semirandom numbers
|
||||
unsigned mask = 0;
|
||||
unsigned one = 1;
|
||||
for (unsigned u = 0; u < low_shift; ++u) {
|
||||
mask += one << u;
|
||||
}
|
||||
for (unsigned u = 0; u < high_shift; ++u) {
|
||||
mask += one << (16 + u);
|
||||
}
|
||||
for (unsigned u = 0; u < count/uDivideFactor; ++u) {
|
||||
unsigned i = 0;
|
||||
for (; i< uDivideFactor; ++i) {
|
||||
pNumbers[i] = distribution(generator) & mask;
|
||||
}
|
||||
ofile.write(reinterpret_cast<char *>(pNumbers), uDivideFactor * 4 );
|
||||
}
|
||||
ofile.close();
|
||||
return 0;
|
||||
}
|
||||
// flexible random number generator providing multiple distributions.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/random/mersenne_twister.hpp>
|
||||
#include <boost/random/uniform_int_distribution.hpp>
|
||||
#include <stdio.h>
|
||||
#include "stdlib.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost;
|
||||
|
||||
int main(int argc, const char ** argv) {
|
||||
random::mt19937 generator;
|
||||
random::uniform_int_distribution<unsigned> distribution;
|
||||
//defaults
|
||||
unsigned high_shift = 16;
|
||||
unsigned low_shift = 16;
|
||||
unsigned count = 1000000;
|
||||
//Reading in user arguments
|
||||
if (argc > 1)
|
||||
high_shift = atoi(argv[1]);
|
||||
if (argc > 2)
|
||||
low_shift = atoi(argv[2]);
|
||||
if (argc > 3)
|
||||
count = atoi(argv[3]);
|
||||
if (high_shift > 16)
|
||||
high_shift = 16;
|
||||
if (low_shift > 16)
|
||||
low_shift = 16;
|
||||
std::ofstream ofile;
|
||||
ofile.open("input.txt", std::ios_base::out | std::ios_base::binary |
|
||||
std::ios_base::trunc);
|
||||
if (ofile.bad()) {
|
||||
printf("could not open input.txt for writing!\n");
|
||||
return 1;
|
||||
}
|
||||
//buffering file output for speed
|
||||
unsigned uDivideFactor = 1000;
|
||||
//Skipping buffering for small files
|
||||
if (count < uDivideFactor * 100)
|
||||
uDivideFactor = count;
|
||||
unsigned * pNumbers = static_cast<unsigned *>(malloc(uDivideFactor *
|
||||
sizeof(unsigned)));
|
||||
//Generating semirandom numbers
|
||||
unsigned mask = 0;
|
||||
unsigned one = 1;
|
||||
for (unsigned u = 0; u < low_shift; ++u) {
|
||||
mask += one << u;
|
||||
}
|
||||
for (unsigned u = 0; u < high_shift; ++u) {
|
||||
mask += one << (16 + u);
|
||||
}
|
||||
for (unsigned u = 0; u < count/uDivideFactor; ++u) {
|
||||
unsigned i = 0;
|
||||
for (; i< uDivideFactor; ++i) {
|
||||
pNumbers[i] = distribution(generator) & mask;
|
||||
}
|
||||
ofile.write(reinterpret_cast<char *>(pNumbers), uDivideFactor * 4 );
|
||||
}
|
||||
ofile.close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+101
-101
@@ -1,101 +1,101 @@
|
||||
//! \file
|
||||
//! \brief integer sort with a rightshift functor reverse sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <functional>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
struct negrightshift {
|
||||
inline int operator()(const int &x, const unsigned offset) {
|
||||
return -(x >> offset);
|
||||
}
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
|
||||
//[reverse_int_1
|
||||
std::sort(array.begin(), array.end(), std::greater<DATA_TYPE>());
|
||||
//] [/reverse_int_1]
|
||||
else
|
||||
//[reverse_int_2
|
||||
integer_sort(array.begin(), array.end(), negrightshift(), std::greater<DATA_TYPE>());
|
||||
//] [/reverse_int_2]
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]));
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
//! \file
|
||||
//! \brief integer sort with a rightshift functor reverse sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <functional>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
struct negrightshift {
|
||||
inline int operator()(const int &x, const unsigned offset) {
|
||||
return -(x >> offset);
|
||||
}
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
|
||||
//[reverse_int_1
|
||||
std::sort(array.begin(), array.end(), std::greater<DATA_TYPE>());
|
||||
//] [/reverse_int_1]
|
||||
else
|
||||
//[reverse_int_2
|
||||
integer_sort(array.begin(), array.end(), negrightshift(), std::greater<DATA_TYPE>());
|
||||
//] [/reverse_int_2]
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]));
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,112 +1,112 @@
|
||||
// spreadsort string functor reverse sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
struct greaterthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.a > y.a;
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (!indata) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.a.empty() || !(array.size() % 1000)) {
|
||||
inval.a = "";
|
||||
array.push_back(inval);
|
||||
}
|
||||
else {
|
||||
inval.a[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), greaterthan());
|
||||
else
|
||||
reverse_string_sort(array.begin(), array.end(), bracket(), getsize(),
|
||||
greaterthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort string functor reverse sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
struct greaterthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.a > y.a;
|
||||
}
|
||||
};
|
||||
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (!indata) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.a.empty() || !(array.size() % 1000)) {
|
||||
inval.a = "";
|
||||
array.push_back(inval);
|
||||
}
|
||||
else {
|
||||
inval.a[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end(), greaterthan());
|
||||
else
|
||||
reverse_string_sort(array.begin(), array.end(), bracket(), getsize(),
|
||||
greaterthan());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,98 +1,98 @@
|
||||
// spreadsort reverse string sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (!indata) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval;
|
||||
while (!indata.eof() ) {
|
||||
//testing substrings
|
||||
if (!(array.size() % 2))
|
||||
inval = "prefix" + inval;
|
||||
else
|
||||
inval += "suffix";
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.empty() || !(array.size() % 1000))
|
||||
array.push_back("");
|
||||
else {
|
||||
inval[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end(), std::greater<string>());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount);
|
||||
reverse_string_sort(array.begin(), array.end(), std::greater<string>());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u] << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort reverse string sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (!indata) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval;
|
||||
while (!indata.eof() ) {
|
||||
//testing substrings
|
||||
if (!(array.size() % 2))
|
||||
inval = "prefix" + inval;
|
||||
else
|
||||
inval += "suffix";
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.empty() || !(array.size() % 1000))
|
||||
array.push_back("");
|
||||
else {
|
||||
inval[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end(), std::greater<string>());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount);
|
||||
reverse_string_sort(array.begin(), array.end(), std::greater<string>());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u] << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,98 +1,98 @@
|
||||
//! \brief Integer sort with a rightshift functor sorting example.
|
||||
//! \file
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
//[rightshift_int_functor
|
||||
struct rightshift {
|
||||
inline int operator()(DATA_TYPE x, unsigned offset) { return x >> offset; }
|
||||
};
|
||||
//] [/rightshift_int_functor]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end());
|
||||
} else {
|
||||
//[rightshift_1
|
||||
integer_sort(array.begin(), array.end(), rightshift());
|
||||
//] [/rightshift_1]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
//! \brief Integer sort with a rightshift functor sorting example.
|
||||
//! \file
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
//[rightshift_int_functor
|
||||
struct rightshift {
|
||||
inline int operator()(DATA_TYPE x, unsigned offset) { return x >> offset; }
|
||||
};
|
||||
//] [/rightshift_int_functor]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end());
|
||||
} else {
|
||||
//[rightshift_1
|
||||
integer_sort(array.begin(), array.end(), rightshift());
|
||||
//] [/rightshift_1]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+88
-88
@@ -1,88 +1,88 @@
|
||||
// spreadsort sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE int
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount)
|
||||
input.read(reinterpret_cast<char *>(&(array[v++])), uSize );
|
||||
if (v < uCount)
|
||||
array.resize(v);
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
boost::sort::spreadsort::spreadsort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
input.close();
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+107
-107
@@ -1,107 +1,107 @@
|
||||
// float_sort rightshift functor sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE float
|
||||
#define CAST_TYPE int
|
||||
|
||||
//Casting to an integer before bitshifting
|
||||
struct rightshift {
|
||||
inline int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<DATA_TYPE, int>(x) >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<float, int>(array[v]) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 | float_mem_cast<float, int>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//float_sort(&(array[0]), &(array[0]) + uCount, rightshift());
|
||||
float_sort(array.begin(), array.end(), rightshift());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// float_sort rightshift functor sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE float
|
||||
#define CAST_TYPE int
|
||||
|
||||
//Casting to an integer before bitshifting
|
||||
struct rightshift {
|
||||
inline int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<DATA_TYPE, int>(x) >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
//Note that this converts NaNs and -0.0 to 0.0, so that sorting results are
|
||||
//identical every time
|
||||
int main(int argc, const char ** argv) {
|
||||
size_t uCount,uSize=sizeof(DATA_TYPE);
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
std::ifstream input("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (input.fail()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
double total = 0.0;
|
||||
std::vector<DATA_TYPE> array;
|
||||
input.seekg (0, std::ios_base::end);
|
||||
size_t length = input.tellg();
|
||||
uCount = length/uSize;
|
||||
//Run multiple loops, if requested
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
input.seekg (0, std::ios_base::beg);
|
||||
//Conversion to a vector
|
||||
array.resize(uCount);
|
||||
unsigned v = 0;
|
||||
while (input.good() && v < uCount) {
|
||||
input.read(reinterpret_cast<char *>(&(array[v])), uSize );
|
||||
//Testcase doesn't sort NaNs; they just cause confusion
|
||||
if (!(array[v] < 0.0) && !(0.0 < array[v]))
|
||||
array[v] = 0.0;
|
||||
//Checking for denormalized numbers
|
||||
if (!(float_mem_cast<float, int>(array[v]) & 0x7f800000)) {
|
||||
//Make the top exponent bit high
|
||||
CAST_TYPE temp = 0x40000000 | float_mem_cast<float, int>(array[v]);
|
||||
memcpy(&(array[v]), &temp, sizeof(DATA_TYPE));
|
||||
}
|
||||
++v;
|
||||
}
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//float_sort(&(array[0]), &(array[0]) + uCount, rightshift());
|
||||
float_sort(array.begin(), array.end(), rightshift());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start) ;
|
||||
std::ofstream ofile;
|
||||
if (stdSort)
|
||||
ofile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
ofile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (ofile.good()) {
|
||||
for (unsigned v = 0; v < array.size(); ++v) {
|
||||
ofile.write(reinterpret_cast<char *>(&(array[v])), sizeof(array[v]) );
|
||||
}
|
||||
ofile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+127
-127
@@ -1,127 +1,127 @@
|
||||
//! \brief spreadsort string functor sorting example.
|
||||
//! \file
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
//[lessthan_functor
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.a < y.a;
|
||||
}
|
||||
};
|
||||
//] [/lessthan_functor]
|
||||
|
||||
//[bracket_functor
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
//] [/bracket_functor]
|
||||
|
||||
//[getsize_functor
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
//] [/getsize_functor]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.a.empty() || !(array.size() % 1000)) {
|
||||
inval.a = "";
|
||||
array.push_back(inval);
|
||||
}
|
||||
else {
|
||||
inval.a[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
} else {
|
||||
//[stringsort_functors_call
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
//] [/stringsort_functors_call]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort) {
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
} else {
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
}
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort) {
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
} else {
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//! \brief spreadsort string functor sorting example.
|
||||
//! \file
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct DATA_TYPE {
|
||||
string a;
|
||||
};
|
||||
|
||||
//[lessthan_functor
|
||||
|
||||
struct lessthan {
|
||||
inline bool operator()(const DATA_TYPE &x, const DATA_TYPE &y) const {
|
||||
return x.a < y.a;
|
||||
}
|
||||
};
|
||||
//] [/lessthan_functor]
|
||||
|
||||
//[bracket_functor
|
||||
struct bracket {
|
||||
inline unsigned char operator()(const DATA_TYPE &x, size_t offset) const {
|
||||
return x.a[offset];
|
||||
}
|
||||
};
|
||||
//] [/bracket_functor]
|
||||
|
||||
//[getsize_functor
|
||||
struct getsize {
|
||||
inline size_t operator()(const DATA_TYPE &x) const{ return x.a.size(); }
|
||||
};
|
||||
//] [/getsize_functor]
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
indata >> inval.a;
|
||||
while (!indata.eof() ) {
|
||||
array.push_back(inval);
|
||||
//Inserting embedded nulls and empty strings
|
||||
if (!(array.size() % 100)) {
|
||||
if (inval.a.empty() || !(array.size() % 1000)) {
|
||||
inval.a = "";
|
||||
array.push_back(inval);
|
||||
}
|
||||
else {
|
||||
inval.a[0] = '\0';
|
||||
array.push_back(inval);
|
||||
}
|
||||
}
|
||||
indata >> inval.a;
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort) {
|
||||
std::sort(array.begin(), array.end(), lessthan());
|
||||
} else {
|
||||
//[stringsort_functors_call
|
||||
string_sort(array.begin(), array.end(), bracket(), getsize(), lessthan());
|
||||
//] [/stringsort_functors_call]
|
||||
}
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort) {
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
} else {
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
}
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u].a << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort) {
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
} else {
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
+85
-85
@@ -1,85 +1,85 @@
|
||||
// spreadsort string sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval;
|
||||
array.push_back(inval);
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount);
|
||||
string_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u] << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// spreadsort string sorting example.
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::string;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE string
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
DATA_TYPE inval;
|
||||
while (!indata.eof() ) {
|
||||
indata >> inval;
|
||||
array.push_back(inval);
|
||||
}
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount);
|
||||
string_sort(array.begin(), array.end());
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u)
|
||||
outfile << array[u] << "\n";
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+96
-96
@@ -1,96 +1,96 @@
|
||||
// spreadsort wstring sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::wstring;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE wstring
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
unsigned short inval;
|
||||
DATA_TYPE current;
|
||||
while (indata.good()) {
|
||||
indata.read(reinterpret_cast<char *>(&inval), sizeof(inval));
|
||||
current.push_back(inval);
|
||||
//32 characters is a moderately long string
|
||||
if (static_cast<int>(current.size()) > inval || current.size() >= 32) {
|
||||
array.push_back(current);
|
||||
current.clear();
|
||||
}
|
||||
}
|
||||
//adding the last string
|
||||
if (!current.empty())
|
||||
array.push_back(current);
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
wchar_t cast_type = 0;
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount, cast_type);
|
||||
string_sort(array.begin(), array.end(), cast_type);
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u){
|
||||
for (unsigned v = 0; v < array[u].size(); ++v)
|
||||
outfile << array[u][v];
|
||||
outfile << "\n";
|
||||
}
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
// spreadsort wstring sorting example
|
||||
//
|
||||
// Copyright Steven Ross 2009-2014.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
using std::wstring;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
#define DATA_TYPE wstring
|
||||
|
||||
//Pass in an argument to test std::sort
|
||||
int main(int argc, const char ** argv) {
|
||||
std::ifstream indata;
|
||||
std::ofstream outfile;
|
||||
bool stdSort = false;
|
||||
unsigned loopCount = 1;
|
||||
for (int u = 1; u < argc; ++u) {
|
||||
if (std::string(argv[u]) == "-std")
|
||||
stdSort = true;
|
||||
else
|
||||
loopCount = atoi(argv[u]);
|
||||
}
|
||||
double total = 0.0;
|
||||
//Run multiple loops, if requested
|
||||
std::vector<DATA_TYPE> array;
|
||||
for (unsigned u = 0; u < loopCount; ++u) {
|
||||
indata.open("input.txt", std::ios_base::in | std::ios_base::binary);
|
||||
if (indata.bad()) {
|
||||
printf("input.txt could not be opened\n");
|
||||
return 1;
|
||||
}
|
||||
unsigned short inval;
|
||||
DATA_TYPE current;
|
||||
while (indata.good()) {
|
||||
indata.read(reinterpret_cast<char *>(&inval), sizeof(inval));
|
||||
current.push_back(inval);
|
||||
//32 characters is a moderately long string
|
||||
if (static_cast<int>(current.size()) > inval || current.size() >= 32) {
|
||||
array.push_back(current);
|
||||
current.clear();
|
||||
}
|
||||
}
|
||||
//adding the last string
|
||||
if (!current.empty())
|
||||
array.push_back(current);
|
||||
|
||||
indata.close();
|
||||
clock_t start, end;
|
||||
double elapsed;
|
||||
start = clock();
|
||||
wchar_t cast_type = 0;
|
||||
if (stdSort)
|
||||
//std::sort(&(array[0]), &(array[0]) + uCount);
|
||||
std::sort(array.begin(), array.end());
|
||||
else
|
||||
//string_sort(&(array[0]), &(array[0]) + uCount, cast_type);
|
||||
string_sort(array.begin(), array.end(), cast_type);
|
||||
end = clock();
|
||||
elapsed = static_cast<double>(end - start);
|
||||
if (stdSort)
|
||||
outfile.open("standard_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
else
|
||||
outfile.open("boost_sort_out.txt", std::ios_base::out |
|
||||
std::ios_base::binary | std::ios_base::trunc);
|
||||
if (outfile.good()) {
|
||||
for (unsigned u = 0; u < array.size(); ++u){
|
||||
for (unsigned v = 0; v < array[u].size(); ++v)
|
||||
outfile << array[u][v];
|
||||
outfile << "\n";
|
||||
}
|
||||
outfile.close();
|
||||
}
|
||||
total += elapsed;
|
||||
array.clear();
|
||||
}
|
||||
if (stdSort)
|
||||
printf("std::sort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
else
|
||||
printf("spreadsort elapsed time %f\n", total / CLOCKS_PER_SEC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+24
-24
@@ -1,24 +1,24 @@
|
||||
// The Boost Sort library cumulative header.
|
||||
|
||||
// Copyright Steven J. Ross 2014
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
#ifndef BOOST_SORT_HPP
|
||||
#define BOOST_SORT_HPP
|
||||
|
||||
/*
|
||||
Cumulative include for the Boost Sort library
|
||||
*/
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/sort/spinsort/spinsort.hpp>
|
||||
#include <boost/sort/flat_stable_sort/flat_stable_sort.hpp>
|
||||
#include <boost/sort/pdqsort/pdqsort.h>
|
||||
#include <boost/sort/block_indirect_sort/block_indirect_sort.hpp>
|
||||
#include <boost/sort/sample_sort/sample_sort.hpp>
|
||||
#include <boost/sort/parallel_stable_sort/parallel_stable_sort.hpp>
|
||||
|
||||
#endif
|
||||
// The Boost Sort library cumulative header.
|
||||
|
||||
// Copyright Steven J. Ross 2014
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
#ifndef BOOST_SORT_HPP
|
||||
#define BOOST_SORT_HPP
|
||||
|
||||
/*
|
||||
Cumulative include for the Boost Sort library
|
||||
*/
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
#include <boost/sort/spinsort/spinsort.hpp>
|
||||
#include <boost/sort/flat_stable_sort/flat_stable_sort.hpp>
|
||||
#include <boost/sort/pdqsort/pdqsort.h>
|
||||
#include <boost/sort/block_indirect_sort/block_indirect_sort.hpp>
|
||||
#include <boost/sort/sample_sort/sample_sort.hpp>
|
||||
#include <boost/sort/parallel_stable_sort/parallel_stable_sort.hpp>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
//constant definitions for the Boost Sort library
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
//Tuning constants
|
||||
//This should be tuned to your processor cache;
|
||||
//if you go too large you get cache misses on bins
|
||||
//The smaller this number, the less worst-case memory usage.
|
||||
//If too small, too many recursions slow down spreadsort
|
||||
enum { max_splits = 11,
|
||||
//It's better to have a few cache misses and finish sorting
|
||||
//than to run another iteration
|
||||
max_finishing_splits = max_splits + 1,
|
||||
//Sets the minimum number of items per bin.
|
||||
int_log_mean_bin_size = 2,
|
||||
//Used to force a comparison-based sorting for small bins, if it's faster.
|
||||
//Minimum value 1
|
||||
int_log_min_split_count = 9,
|
||||
//This is the minimum split count to use spreadsort when it will finish in one
|
||||
//iteration. Make this larger the faster std::sort is relative to integer_sort.
|
||||
int_log_finishing_count = 31,
|
||||
//Sets the minimum number of items per bin for floating point.
|
||||
float_log_mean_bin_size = 2,
|
||||
//Used to force a comparison-based sorting for small bins, if it's faster.
|
||||
//Minimum value 1
|
||||
float_log_min_split_count = 8,
|
||||
//This is the minimum split count to use spreadsort when it will finish in one
|
||||
//iteration. Make this larger the faster std::sort is relative to float_sort.
|
||||
float_log_finishing_count = 4,
|
||||
//There is a minimum size below which it is not worth using spreadsort
|
||||
min_sort_size = 1000 };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//constant definitions for the Boost Sort library
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_CONSTANTS
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
//Tuning constants
|
||||
//This should be tuned to your processor cache;
|
||||
//if you go too large you get cache misses on bins
|
||||
//The smaller this number, the less worst-case memory usage.
|
||||
//If too small, too many recursions slow down spreadsort
|
||||
enum { max_splits = 11,
|
||||
//It's better to have a few cache misses and finish sorting
|
||||
//than to run another iteration
|
||||
max_finishing_splits = max_splits + 1,
|
||||
//Sets the minimum number of items per bin.
|
||||
int_log_mean_bin_size = 2,
|
||||
//Used to force a comparison-based sorting for small bins, if it's faster.
|
||||
//Minimum value 1
|
||||
int_log_min_split_count = 9,
|
||||
//This is the minimum split count to use spreadsort when it will finish in one
|
||||
//iteration. Make this larger the faster std::sort is relative to integer_sort.
|
||||
int_log_finishing_count = 31,
|
||||
//Sets the minimum number of items per bin for floating point.
|
||||
float_log_mean_bin_size = 2,
|
||||
//Used to force a comparison-based sorting for small bins, if it's faster.
|
||||
//Minimum value 1
|
||||
float_log_min_split_count = 8,
|
||||
//This is the minimum split count to use spreadsort when it will finish in one
|
||||
//iteration. Make this larger the faster std::sort is relative to float_sort.
|
||||
float_log_finishing_count = 4,
|
||||
//There is a minimum size below which it is not worth using spreadsort
|
||||
min_sort_size = 1000 };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,494 +1,494 @@
|
||||
// Details for templated Spreadsort-based integer_sort.
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <limits>
|
||||
#include <functional>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/serialization/static_warning.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
// Return true if the list is sorted. Otherwise, find the minimum and
|
||||
// maximum using <.
|
||||
template <class RandomAccessIter>
|
||||
inline bool
|
||||
is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
|
||||
RandomAccessIter & max, RandomAccessIter & min)
|
||||
{
|
||||
min = max = current;
|
||||
//This assumes we have more than 1 element based on prior checks.
|
||||
while (!(*(current + 1) < *current)) {
|
||||
//If everything is in sorted order, return
|
||||
if (++current == last - 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
//The maximum is the last sorted element
|
||||
max = current;
|
||||
//Start from the first unsorted element
|
||||
while (++current < last) {
|
||||
if (*max < *current)
|
||||
max = current;
|
||||
else if (*current < *min)
|
||||
min = current;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return true if the list is sorted. Otherwise, find the minimum and
|
||||
// maximum.
|
||||
// Use a user-defined comparison operator
|
||||
template <class RandomAccessIter, class Compare>
|
||||
inline bool
|
||||
is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
|
||||
RandomAccessIter & max, RandomAccessIter & min, Compare comp)
|
||||
{
|
||||
min = max = current;
|
||||
while (!comp(*(current + 1), *current)) {
|
||||
//If everything is in sorted order, return
|
||||
if (++current == last - 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
//The maximum is the last sorted element
|
||||
max = current;
|
||||
while (++current < last) {
|
||||
if (comp(*max, *current))
|
||||
max = current;
|
||||
else if (comp(*current, *min))
|
||||
min = current;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//Gets a non-negative right bit shift to operate as a logarithmic divisor
|
||||
template<unsigned log_mean_bin_size>
|
||||
inline int
|
||||
get_log_divisor(size_t count, int log_range)
|
||||
{
|
||||
int log_divisor;
|
||||
//If we can finish in one iteration without exceeding either
|
||||
//(2 to the max_finishing_splits) or n bins, do so
|
||||
if ((log_divisor = log_range - rough_log_2_size(count)) <= 0 &&
|
||||
log_range <= max_finishing_splits)
|
||||
log_divisor = 0;
|
||||
else {
|
||||
//otherwise divide the data into an optimized number of pieces
|
||||
log_divisor += log_mean_bin_size;
|
||||
//Cannot exceed max_splits or cache misses slow down bin lookups
|
||||
if ((log_range - log_divisor) > max_splits)
|
||||
log_divisor = log_range - max_splits;
|
||||
}
|
||||
return log_divisor;
|
||||
}
|
||||
|
||||
//Implementation for recursive integer sorting
|
||||
template <class RandomAccessIter, class Div_type, class Size_type>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes)
|
||||
{
|
||||
//This step is roughly 10% of runtime, but it helps avoid worst-case
|
||||
//behavior and improve behavior with real data
|
||||
//If you know the maximum and minimum ahead of time, you can pass those
|
||||
//values in and skip this step for the first iteration
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min))
|
||||
return;
|
||||
RandomAccessIter * target_bin;
|
||||
unsigned log_divisor = get_log_divisor<int_log_mean_bin_size>(
|
||||
last - first, rough_log_2_size(Size_type((*max >> 0) - (*min >> 0))));
|
||||
Div_type div_min = *min >> log_divisor;
|
||||
Div_type div_max = *max >> log_divisor;
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins =
|
||||
size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin; this takes roughly 10% of runtime
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[size_t((*(current++) >> log_divisor) - div_min)]++;
|
||||
//Assign the bin positions
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
RandomAccessIter nextbinstart = first;
|
||||
//Swap into place
|
||||
//This dominates runtime, mostly in the swap and bin lookups
|
||||
for (unsigned u = 0; u < bin_count - 1; ++u) {
|
||||
RandomAccessIter * local_bin = bins + u;
|
||||
nextbinstart += bin_sizes[u];
|
||||
//Iterating over each element in this bin
|
||||
for (RandomAccessIter current = *local_bin; current < nextbinstart;
|
||||
++current) {
|
||||
//Swapping elements in current into place until the correct
|
||||
//element has been swapped in
|
||||
for (target_bin = (bins + ((*current >> log_divisor) - div_min));
|
||||
target_bin != local_bin;
|
||||
target_bin = bins + ((*current >> log_divisor) - div_min)) {
|
||||
//3-way swap; this is about 1% faster than a 2-way swap
|
||||
//The main advantage is less copies are involved per item
|
||||
//put in the correct place
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type tmp;
|
||||
RandomAccessIter b = (*target_bin)++;
|
||||
RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min);
|
||||
if (b_bin != local_bin) {
|
||||
RandomAccessIter c = (*b_bin)++;
|
||||
tmp = *c;
|
||||
*c = *b;
|
||||
}
|
||||
else
|
||||
tmp = *b;
|
||||
*b = *current;
|
||||
*current = tmp;
|
||||
}
|
||||
}
|
||||
*local_bin = nextbinstart;
|
||||
}
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted and we should skip recursion
|
||||
if (!log_divisor)
|
||||
return;
|
||||
//log_divisor is the remaining range; calculating the comparison threshold
|
||||
size_t max_count =
|
||||
get_min_count<int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>(log_divisor);
|
||||
|
||||
//Recursing
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
Size_type count = bin_cache[u] - lastPos;
|
||||
//don't sort unless there are at least two items to Compare
|
||||
if (count < 2)
|
||||
continue;
|
||||
//using std::sort if its worst-case is better
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u]);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Size_type>(lastPos,
|
||||
bin_cache[u],
|
||||
bin_cache,
|
||||
cache_end,
|
||||
bin_sizes);
|
||||
}
|
||||
}
|
||||
|
||||
//Generic bitshift-based 3-way swapping code
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline void inner_swap_loop(RandomAccessIter * bins,
|
||||
const RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
|
||||
, const unsigned log_divisor, const Div_type div_min)
|
||||
{
|
||||
RandomAccessIter * local_bin = bins + ii;
|
||||
for (RandomAccessIter current = *local_bin; current < next_bin_start;
|
||||
++current) {
|
||||
for (RandomAccessIter * target_bin =
|
||||
(bins + (rshift(*current, log_divisor) - div_min));
|
||||
target_bin != local_bin;
|
||||
target_bin = bins + (rshift(*current, log_divisor) - div_min)) {
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type tmp;
|
||||
RandomAccessIter b = (*target_bin)++;
|
||||
RandomAccessIter * b_bin =
|
||||
bins + (rshift(*b, log_divisor) - div_min);
|
||||
//Three-way swap; if the item to be swapped doesn't belong
|
||||
//in the current bin, swap it to where it belongs
|
||||
if (b_bin != local_bin) {
|
||||
RandomAccessIter c = (*b_bin)++;
|
||||
tmp = *c;
|
||||
*c = *b;
|
||||
}
|
||||
//Note: we could increment current once the swap is done in this case
|
||||
//but that seems to impair performance
|
||||
else
|
||||
tmp = *b;
|
||||
*b = *current;
|
||||
*current = tmp;
|
||||
}
|
||||
}
|
||||
*local_bin = next_bin_start;
|
||||
}
|
||||
|
||||
//Standard swapping wrapper for ascending values
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline void swap_loop(RandomAccessIter * bins,
|
||||
RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
|
||||
, const size_t *bin_sizes
|
||||
, const unsigned log_divisor, const Div_type div_min)
|
||||
{
|
||||
next_bin_start += bin_sizes[ii];
|
||||
inner_swap_loop<RandomAccessIter, Div_type, Right_shift>(bins,
|
||||
next_bin_start, ii, rshift, log_divisor, div_min);
|
||||
}
|
||||
|
||||
//Functor implementation for recursive sorting
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare, class Size_type, unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes, Right_shift rshift, Compare comp)
|
||||
{
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min, comp))
|
||||
return;
|
||||
unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
|
||||
rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
|
||||
Div_type div_min = rshift(*min, log_divisor);
|
||||
Div_type div_max = rshift(*max, log_divisor);
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
|
||||
cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
//Swap into place
|
||||
RandomAccessIter next_bin_start = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; ++u)
|
||||
swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, next_bin_start,
|
||||
u, rshift, bin_sizes, log_divisor, div_min);
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted
|
||||
if (!log_divisor)
|
||||
return;
|
||||
|
||||
//Recursing
|
||||
size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_divisor);
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
size_t count = bin_cache[u] - lastPos;
|
||||
if (count < 2)
|
||||
continue;
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u], comp);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
Size_type, log_mean_bin_size, log_min_split_count, log_finishing_count>
|
||||
(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, rshift, comp);
|
||||
}
|
||||
}
|
||||
|
||||
//Functor implementation for recursive sorting with only Shift overridden
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Size_type, unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes, Right_shift rshift)
|
||||
{
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min))
|
||||
return;
|
||||
unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
|
||||
rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
|
||||
Div_type div_min = rshift(*min, log_divisor);
|
||||
Div_type div_max = rshift(*max, log_divisor);
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
|
||||
cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
//Swap into place
|
||||
RandomAccessIter nextbinstart = first;
|
||||
for (unsigned ii = 0; ii < bin_count - 1; ++ii)
|
||||
swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, nextbinstart,
|
||||
ii, rshift, bin_sizes, log_divisor, div_min);
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted
|
||||
if (!log_divisor)
|
||||
return;
|
||||
|
||||
//Recursing
|
||||
size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_divisor);
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
size_t count = bin_cache[u] - lastPos;
|
||||
if (count < 2)
|
||||
continue;
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u]);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Size_type,
|
||||
log_mean_bin_size, log_min_split_count, log_finishing_count>(lastPos,
|
||||
bin_cache[u], bin_cache, cache_end, bin_sizes, rshift);
|
||||
}
|
||||
}
|
||||
|
||||
//Holds the bin vector and makes the initial recursive call
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, size_t>(first, last,
|
||||
bin_cache, 0, bin_sizes);
|
||||
}
|
||||
|
||||
//Holds the bin vector and makes the initial recursive call
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, boost::uintmax_t>(first,
|
||||
last, bin_cache, 0, bin_sizes);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last);
|
||||
}
|
||||
|
||||
|
||||
//Same for the full functor version
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
size_t, int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift, comp);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
boost::uintmax_t, int_log_mean_bin_size,
|
||||
int_log_min_split_count, int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift, comp);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last, comp);
|
||||
}
|
||||
|
||||
|
||||
//Same for the right shift version
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, size_t,
|
||||
int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift,
|
||||
boost::uintmax_t, int_log_mean_bin_size,
|
||||
int_log_min_split_count, int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
// Details for templated Spreadsort-based integer_sort.
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_INTEGER_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <limits>
|
||||
#include <functional>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/serialization/static_warning.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
// Return true if the list is sorted. Otherwise, find the minimum and
|
||||
// maximum using <.
|
||||
template <class RandomAccessIter>
|
||||
inline bool
|
||||
is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
|
||||
RandomAccessIter & max, RandomAccessIter & min)
|
||||
{
|
||||
min = max = current;
|
||||
//This assumes we have more than 1 element based on prior checks.
|
||||
while (!(*(current + 1) < *current)) {
|
||||
//If everything is in sorted order, return
|
||||
if (++current == last - 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
//The maximum is the last sorted element
|
||||
max = current;
|
||||
//Start from the first unsorted element
|
||||
while (++current < last) {
|
||||
if (*max < *current)
|
||||
max = current;
|
||||
else if (*current < *min)
|
||||
min = current;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return true if the list is sorted. Otherwise, find the minimum and
|
||||
// maximum.
|
||||
// Use a user-defined comparison operator
|
||||
template <class RandomAccessIter, class Compare>
|
||||
inline bool
|
||||
is_sorted_or_find_extremes(RandomAccessIter current, RandomAccessIter last,
|
||||
RandomAccessIter & max, RandomAccessIter & min, Compare comp)
|
||||
{
|
||||
min = max = current;
|
||||
while (!comp(*(current + 1), *current)) {
|
||||
//If everything is in sorted order, return
|
||||
if (++current == last - 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
//The maximum is the last sorted element
|
||||
max = current;
|
||||
while (++current < last) {
|
||||
if (comp(*max, *current))
|
||||
max = current;
|
||||
else if (comp(*current, *min))
|
||||
min = current;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//Gets a non-negative right bit shift to operate as a logarithmic divisor
|
||||
template<unsigned log_mean_bin_size>
|
||||
inline int
|
||||
get_log_divisor(size_t count, int log_range)
|
||||
{
|
||||
int log_divisor;
|
||||
//If we can finish in one iteration without exceeding either
|
||||
//(2 to the max_finishing_splits) or n bins, do so
|
||||
if ((log_divisor = log_range - rough_log_2_size(count)) <= 0 &&
|
||||
log_range <= max_finishing_splits)
|
||||
log_divisor = 0;
|
||||
else {
|
||||
//otherwise divide the data into an optimized number of pieces
|
||||
log_divisor += log_mean_bin_size;
|
||||
//Cannot exceed max_splits or cache misses slow down bin lookups
|
||||
if ((log_range - log_divisor) > max_splits)
|
||||
log_divisor = log_range - max_splits;
|
||||
}
|
||||
return log_divisor;
|
||||
}
|
||||
|
||||
//Implementation for recursive integer sorting
|
||||
template <class RandomAccessIter, class Div_type, class Size_type>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes)
|
||||
{
|
||||
//This step is roughly 10% of runtime, but it helps avoid worst-case
|
||||
//behavior and improve behavior with real data
|
||||
//If you know the maximum and minimum ahead of time, you can pass those
|
||||
//values in and skip this step for the first iteration
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min))
|
||||
return;
|
||||
RandomAccessIter * target_bin;
|
||||
unsigned log_divisor = get_log_divisor<int_log_mean_bin_size>(
|
||||
last - first, rough_log_2_size(Size_type((*max >> 0) - (*min >> 0))));
|
||||
Div_type div_min = *min >> log_divisor;
|
||||
Div_type div_max = *max >> log_divisor;
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins =
|
||||
size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin; this takes roughly 10% of runtime
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[size_t((*(current++) >> log_divisor) - div_min)]++;
|
||||
//Assign the bin positions
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
RandomAccessIter nextbinstart = first;
|
||||
//Swap into place
|
||||
//This dominates runtime, mostly in the swap and bin lookups
|
||||
for (unsigned u = 0; u < bin_count - 1; ++u) {
|
||||
RandomAccessIter * local_bin = bins + u;
|
||||
nextbinstart += bin_sizes[u];
|
||||
//Iterating over each element in this bin
|
||||
for (RandomAccessIter current = *local_bin; current < nextbinstart;
|
||||
++current) {
|
||||
//Swapping elements in current into place until the correct
|
||||
//element has been swapped in
|
||||
for (target_bin = (bins + ((*current >> log_divisor) - div_min));
|
||||
target_bin != local_bin;
|
||||
target_bin = bins + ((*current >> log_divisor) - div_min)) {
|
||||
//3-way swap; this is about 1% faster than a 2-way swap
|
||||
//The main advantage is less copies are involved per item
|
||||
//put in the correct place
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type tmp;
|
||||
RandomAccessIter b = (*target_bin)++;
|
||||
RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min);
|
||||
if (b_bin != local_bin) {
|
||||
RandomAccessIter c = (*b_bin)++;
|
||||
tmp = *c;
|
||||
*c = *b;
|
||||
}
|
||||
else
|
||||
tmp = *b;
|
||||
*b = *current;
|
||||
*current = tmp;
|
||||
}
|
||||
}
|
||||
*local_bin = nextbinstart;
|
||||
}
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted and we should skip recursion
|
||||
if (!log_divisor)
|
||||
return;
|
||||
//log_divisor is the remaining range; calculating the comparison threshold
|
||||
size_t max_count =
|
||||
get_min_count<int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>(log_divisor);
|
||||
|
||||
//Recursing
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
Size_type count = bin_cache[u] - lastPos;
|
||||
//don't sort unless there are at least two items to Compare
|
||||
if (count < 2)
|
||||
continue;
|
||||
//using std::sort if its worst-case is better
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u]);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Size_type>(lastPos,
|
||||
bin_cache[u],
|
||||
bin_cache,
|
||||
cache_end,
|
||||
bin_sizes);
|
||||
}
|
||||
}
|
||||
|
||||
//Generic bitshift-based 3-way swapping code
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline void inner_swap_loop(RandomAccessIter * bins,
|
||||
const RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
|
||||
, const unsigned log_divisor, const Div_type div_min)
|
||||
{
|
||||
RandomAccessIter * local_bin = bins + ii;
|
||||
for (RandomAccessIter current = *local_bin; current < next_bin_start;
|
||||
++current) {
|
||||
for (RandomAccessIter * target_bin =
|
||||
(bins + (rshift(*current, log_divisor) - div_min));
|
||||
target_bin != local_bin;
|
||||
target_bin = bins + (rshift(*current, log_divisor) - div_min)) {
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type tmp;
|
||||
RandomAccessIter b = (*target_bin)++;
|
||||
RandomAccessIter * b_bin =
|
||||
bins + (rshift(*b, log_divisor) - div_min);
|
||||
//Three-way swap; if the item to be swapped doesn't belong
|
||||
//in the current bin, swap it to where it belongs
|
||||
if (b_bin != local_bin) {
|
||||
RandomAccessIter c = (*b_bin)++;
|
||||
tmp = *c;
|
||||
*c = *b;
|
||||
}
|
||||
//Note: we could increment current once the swap is done in this case
|
||||
//but that seems to impair performance
|
||||
else
|
||||
tmp = *b;
|
||||
*b = *current;
|
||||
*current = tmp;
|
||||
}
|
||||
}
|
||||
*local_bin = next_bin_start;
|
||||
}
|
||||
|
||||
//Standard swapping wrapper for ascending values
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline void swap_loop(RandomAccessIter * bins,
|
||||
RandomAccessIter & next_bin_start, unsigned ii, Right_shift &rshift
|
||||
, const size_t *bin_sizes
|
||||
, const unsigned log_divisor, const Div_type div_min)
|
||||
{
|
||||
next_bin_start += bin_sizes[ii];
|
||||
inner_swap_loop<RandomAccessIter, Div_type, Right_shift>(bins,
|
||||
next_bin_start, ii, rshift, log_divisor, div_min);
|
||||
}
|
||||
|
||||
//Functor implementation for recursive sorting
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare, class Size_type, unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes, Right_shift rshift, Compare comp)
|
||||
{
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min, comp))
|
||||
return;
|
||||
unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
|
||||
rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
|
||||
Div_type div_min = rshift(*min, log_divisor);
|
||||
Div_type div_max = rshift(*max, log_divisor);
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
|
||||
cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
//Swap into place
|
||||
RandomAccessIter next_bin_start = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; ++u)
|
||||
swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, next_bin_start,
|
||||
u, rshift, bin_sizes, log_divisor, div_min);
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted
|
||||
if (!log_divisor)
|
||||
return;
|
||||
|
||||
//Recursing
|
||||
size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_divisor);
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
size_t count = bin_cache[u] - lastPos;
|
||||
if (count < 2)
|
||||
continue;
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u], comp);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
Size_type, log_mean_bin_size, log_min_split_count, log_finishing_count>
|
||||
(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, rshift, comp);
|
||||
}
|
||||
}
|
||||
|
||||
//Functor implementation for recursive sorting with only Shift overridden
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Size_type, unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline void
|
||||
spreadsort_rec(RandomAccessIter first, RandomAccessIter last,
|
||||
std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
|
||||
, size_t *bin_sizes, Right_shift rshift)
|
||||
{
|
||||
RandomAccessIter max, min;
|
||||
if (is_sorted_or_find_extremes(first, last, max, min))
|
||||
return;
|
||||
unsigned log_divisor = get_log_divisor<log_mean_bin_size>(last - first,
|
||||
rough_log_2_size(Size_type(rshift(*max, 0) - rshift(*min, 0))));
|
||||
Div_type div_min = rshift(*min, log_divisor);
|
||||
Div_type div_max = rshift(*max, log_divisor);
|
||||
unsigned bin_count = unsigned(div_max - div_min) + 1;
|
||||
unsigned cache_end;
|
||||
RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset,
|
||||
cache_end, bin_count);
|
||||
|
||||
//Calculating the size of each bin
|
||||
for (RandomAccessIter current = first; current != last;)
|
||||
bin_sizes[unsigned(rshift(*(current++), log_divisor) - div_min)]++;
|
||||
bins[0] = first;
|
||||
for (unsigned u = 0; u < bin_count - 1; u++)
|
||||
bins[u + 1] = bins[u] + bin_sizes[u];
|
||||
|
||||
//Swap into place
|
||||
RandomAccessIter nextbinstart = first;
|
||||
for (unsigned ii = 0; ii < bin_count - 1; ++ii)
|
||||
swap_loop<RandomAccessIter, Div_type, Right_shift>(bins, nextbinstart,
|
||||
ii, rshift, bin_sizes, log_divisor, div_min);
|
||||
bins[bin_count - 1] = last;
|
||||
|
||||
//If we've bucketsorted, the array is sorted
|
||||
if (!log_divisor)
|
||||
return;
|
||||
|
||||
//Recursing
|
||||
size_t max_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_divisor);
|
||||
RandomAccessIter lastPos = first;
|
||||
for (unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u],
|
||||
++u) {
|
||||
size_t count = bin_cache[u] - lastPos;
|
||||
if (count < 2)
|
||||
continue;
|
||||
if (count < max_count)
|
||||
std::sort(lastPos, bin_cache[u]);
|
||||
else
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Size_type,
|
||||
log_mean_bin_size, log_min_split_count, log_finishing_count>(lastPos,
|
||||
bin_cache[u], bin_cache, cache_end, bin_sizes, rshift);
|
||||
}
|
||||
}
|
||||
|
||||
//Holds the bin vector and makes the initial recursive call
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, size_t>(first, last,
|
||||
bin_cache, 0, bin_sizes);
|
||||
}
|
||||
|
||||
//Holds the bin vector and makes the initial recursive call
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, boost::uintmax_t>(first,
|
||||
last, bin_cache, 0, bin_sizes);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last);
|
||||
}
|
||||
|
||||
|
||||
//Same for the full functor version
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
size_t, int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift, comp);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, Compare,
|
||||
boost::uintmax_t, int_log_mean_bin_size,
|
||||
int_log_min_split_count, int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift, comp);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift,
|
||||
class Compare>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift, Compare comp)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last, comp);
|
||||
}
|
||||
|
||||
|
||||
//Same for the right shift version
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
//Only use spreadsort if the integer can fit in a size_t
|
||||
inline typename boost::enable_if_c< sizeof(Div_type) <= sizeof(size_t),
|
||||
void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift, size_t,
|
||||
int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
//Only use spreadsort if the integer can fit in a uintmax_t
|
||||
inline typename boost::enable_if_c< (sizeof(Div_type) > sizeof(size_t))
|
||||
&& sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
size_t bin_sizes[1 << max_finishing_splits];
|
||||
std::vector<RandomAccessIter> bin_cache;
|
||||
spreadsort_rec<RandomAccessIter, Div_type, Right_shift,
|
||||
boost::uintmax_t, int_log_mean_bin_size,
|
||||
int_log_min_split_count, int_log_finishing_count>
|
||||
(first, last, bin_cache, 0, bin_sizes, shift);
|
||||
}
|
||||
|
||||
template <class RandomAccessIter, class Div_type, class Right_shift>
|
||||
inline typename boost::disable_if_c< sizeof(Div_type) <= sizeof(size_t)
|
||||
|| sizeof(Div_type) <= sizeof(boost::uintmax_t), void >::type
|
||||
//defaulting to std::sort when integer_sort won't work
|
||||
integer_sort(RandomAccessIter first, RandomAccessIter last, Div_type,
|
||||
Right_shift shift)
|
||||
{
|
||||
//Warning that we're using std::sort, even though integer_sort was called
|
||||
BOOST_STATIC_WARNING( sizeof(Div_type) <= sizeof(size_t) );
|
||||
std::sort(first, last);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,124 +1,124 @@
|
||||
// Contains get_min_count, the core optimization of the spreadsort algorithm.
|
||||
// Also has other helper functions commonly useful across variants.
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <functional>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/serialization/static_warning.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
//This only works on unsigned data types
|
||||
template <typename T>
|
||||
inline unsigned
|
||||
rough_log_2_size(const T& input)
|
||||
{
|
||||
unsigned result = 0;
|
||||
//The && is necessary on some compilers to avoid infinite loops
|
||||
//it doesn't significantly impair performance
|
||||
while ((input >> result) && (result < (8*sizeof(T)))) ++result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Gets the minimum size to call spreadsort on to control worst-case runtime.
|
||||
//This is called for a set of bins, instead of bin-by-bin, to minimize
|
||||
//runtime overhead.
|
||||
//This could be replaced by a lookup table of sizeof(Div_type)*8 but this
|
||||
//function is more general.
|
||||
template<unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline size_t
|
||||
get_min_count(unsigned log_range)
|
||||
{
|
||||
const size_t typed_one = 1;
|
||||
const unsigned min_size = log_mean_bin_size + log_min_split_count;
|
||||
//Assuring that constants have valid settings
|
||||
BOOST_STATIC_ASSERT(log_min_split_count <= max_splits &&
|
||||
log_min_split_count > 0);
|
||||
BOOST_STATIC_ASSERT(max_splits > 1 &&
|
||||
max_splits < (8 * sizeof(unsigned)));
|
||||
BOOST_STATIC_ASSERT(max_finishing_splits >= max_splits &&
|
||||
max_finishing_splits < (8 * sizeof(unsigned)));
|
||||
BOOST_STATIC_ASSERT(log_mean_bin_size >= 0);
|
||||
BOOST_STATIC_ASSERT(log_finishing_count >= 0);
|
||||
//if we can complete in one iteration, do so
|
||||
//This first check allows the compiler to optimize never-executed code out
|
||||
if (log_finishing_count < min_size) {
|
||||
if (log_range <= min_size && log_range <= max_splits) {
|
||||
//Return no smaller than a certain minimum limit
|
||||
if (log_range <= log_finishing_count)
|
||||
return typed_one << log_finishing_count;
|
||||
return typed_one << log_range;
|
||||
}
|
||||
}
|
||||
const unsigned base_iterations = max_splits - log_min_split_count;
|
||||
//sum of n to n + x = ((x + 1) * (n + (n + x)))/2 + log_mean_bin_size
|
||||
const unsigned base_range =
|
||||
((base_iterations + 1) * (max_splits + log_min_split_count))/2
|
||||
+ log_mean_bin_size;
|
||||
//Calculating the required number of iterations, and returning
|
||||
//1 << (iteration_count + min_size)
|
||||
if (log_range < base_range) {
|
||||
unsigned result = log_min_split_count;
|
||||
for (unsigned offset = min_size; offset < log_range;
|
||||
offset += ++result);
|
||||
//Preventing overflow; this situation shouldn't occur
|
||||
if ((result + log_mean_bin_size) >= (8 * sizeof(size_t)))
|
||||
return typed_one << ((8 * sizeof(size_t)) - 1);
|
||||
return typed_one << (result + log_mean_bin_size);
|
||||
}
|
||||
//A quick division can calculate the worst-case runtime for larger ranges
|
||||
unsigned remainder = log_range - base_range;
|
||||
//the max_splits - 1 is used to calculate the ceiling of the division
|
||||
unsigned bit_length = ((((max_splits - 1) + remainder)/max_splits)
|
||||
+ base_iterations + min_size);
|
||||
//Preventing overflow; this situation shouldn't occur
|
||||
if (bit_length >= (8 * sizeof(size_t)))
|
||||
return typed_one << ((8 * sizeof(size_t)) - 1);
|
||||
//n(log_range)/max_splits + C, optimizing worst-case performance
|
||||
return typed_one << bit_length;
|
||||
}
|
||||
|
||||
// Resizes the bin cache and bin sizes, and initializes each bin size to 0.
|
||||
// This generates the memory overhead to use in radix sorting.
|
||||
template <class RandomAccessIter>
|
||||
inline RandomAccessIter *
|
||||
size_bins(size_t *bin_sizes, std::vector<RandomAccessIter>
|
||||
&bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
|
||||
{
|
||||
// Clear the bin sizes
|
||||
for (size_t u = 0; u < bin_count; u++)
|
||||
bin_sizes[u] = 0;
|
||||
//Make sure there is space for the bins
|
||||
cache_end = cache_offset + bin_count;
|
||||
if (cache_end > bin_cache.size())
|
||||
bin_cache.resize(cache_end);
|
||||
return &(bin_cache[cache_offset]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
// Contains get_min_count, the core optimization of the spreadsort algorithm.
|
||||
// Also has other helper functions commonly useful across variants.
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
|
||||
#define BOOST_SORT_SPREADSORT_DETAIL_SPREAD_SORT_COMMON_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <functional>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/serialization/static_warning.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
namespace detail {
|
||||
//This only works on unsigned data types
|
||||
template <typename T>
|
||||
inline unsigned
|
||||
rough_log_2_size(const T& input)
|
||||
{
|
||||
unsigned result = 0;
|
||||
//The && is necessary on some compilers to avoid infinite loops
|
||||
//it doesn't significantly impair performance
|
||||
while ((input >> result) && (result < (8*sizeof(T)))) ++result;
|
||||
return result;
|
||||
}
|
||||
|
||||
//Gets the minimum size to call spreadsort on to control worst-case runtime.
|
||||
//This is called for a set of bins, instead of bin-by-bin, to minimize
|
||||
//runtime overhead.
|
||||
//This could be replaced by a lookup table of sizeof(Div_type)*8 but this
|
||||
//function is more general.
|
||||
template<unsigned log_mean_bin_size,
|
||||
unsigned log_min_split_count, unsigned log_finishing_count>
|
||||
inline size_t
|
||||
get_min_count(unsigned log_range)
|
||||
{
|
||||
const size_t typed_one = 1;
|
||||
const unsigned min_size = log_mean_bin_size + log_min_split_count;
|
||||
//Assuring that constants have valid settings
|
||||
BOOST_STATIC_ASSERT(log_min_split_count <= max_splits &&
|
||||
log_min_split_count > 0);
|
||||
BOOST_STATIC_ASSERT(max_splits > 1 &&
|
||||
max_splits < (8 * sizeof(unsigned)));
|
||||
BOOST_STATIC_ASSERT(max_finishing_splits >= max_splits &&
|
||||
max_finishing_splits < (8 * sizeof(unsigned)));
|
||||
BOOST_STATIC_ASSERT(log_mean_bin_size >= 0);
|
||||
BOOST_STATIC_ASSERT(log_finishing_count >= 0);
|
||||
//if we can complete in one iteration, do so
|
||||
//This first check allows the compiler to optimize never-executed code out
|
||||
if (log_finishing_count < min_size) {
|
||||
if (log_range <= min_size && log_range <= max_splits) {
|
||||
//Return no smaller than a certain minimum limit
|
||||
if (log_range <= log_finishing_count)
|
||||
return typed_one << log_finishing_count;
|
||||
return typed_one << log_range;
|
||||
}
|
||||
}
|
||||
const unsigned base_iterations = max_splits - log_min_split_count;
|
||||
//sum of n to n + x = ((x + 1) * (n + (n + x)))/2 + log_mean_bin_size
|
||||
const unsigned base_range =
|
||||
((base_iterations + 1) * (max_splits + log_min_split_count))/2
|
||||
+ log_mean_bin_size;
|
||||
//Calculating the required number of iterations, and returning
|
||||
//1 << (iteration_count + min_size)
|
||||
if (log_range < base_range) {
|
||||
unsigned result = log_min_split_count;
|
||||
for (unsigned offset = min_size; offset < log_range;
|
||||
offset += ++result);
|
||||
//Preventing overflow; this situation shouldn't occur
|
||||
if ((result + log_mean_bin_size) >= (8 * sizeof(size_t)))
|
||||
return typed_one << ((8 * sizeof(size_t)) - 1);
|
||||
return typed_one << (result + log_mean_bin_size);
|
||||
}
|
||||
//A quick division can calculate the worst-case runtime for larger ranges
|
||||
unsigned remainder = log_range - base_range;
|
||||
//the max_splits - 1 is used to calculate the ceiling of the division
|
||||
unsigned bit_length = ((((max_splits - 1) + remainder)/max_splits)
|
||||
+ base_iterations + min_size);
|
||||
//Preventing overflow; this situation shouldn't occur
|
||||
if (bit_length >= (8 * sizeof(size_t)))
|
||||
return typed_one << ((8 * sizeof(size_t)) - 1);
|
||||
//n(log_range)/max_splits + C, optimizing worst-case performance
|
||||
return typed_one << bit_length;
|
||||
}
|
||||
|
||||
// Resizes the bin cache and bin sizes, and initializes each bin size to 0.
|
||||
// This generates the memory overhead to use in radix sorting.
|
||||
template <class RandomAccessIter>
|
||||
inline RandomAccessIter *
|
||||
size_bins(size_t *bin_sizes, std::vector<RandomAccessIter>
|
||||
&bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
|
||||
{
|
||||
// Clear the bin sizes
|
||||
for (size_t u = 0; u < bin_count; u++)
|
||||
bin_sizes[u] = 0;
|
||||
//Make sure there is space for the bins
|
||||
cache_end = cache_offset + bin_count;
|
||||
if (cache_end > bin_cache.size())
|
||||
bin_cache.resize(cache_end);
|
||||
return &(bin_cache[cache_offset]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,176 +1,176 @@
|
||||
//Templated Spreadsort-based implementation of float_sort and float_mem_cast
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
float_mem_cast fix provided by:
|
||||
Scott McMurray
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLOAT_SORT_HPP
|
||||
#define BOOST_FLOAT_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/float_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
|
||||
/*!
|
||||
\brief Casts a float to the specified integer type.
|
||||
|
||||
\tparam Data_type Floating-point IEEE 754/IEC559 type.
|
||||
\tparam Cast_type Integer type (same size) to which to cast.
|
||||
|
||||
\par Example:
|
||||
\code
|
||||
struct rightshift {
|
||||
int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
|
||||
}
|
||||
};
|
||||
\endcode
|
||||
*/
|
||||
template<class Data_type, class Cast_type>
|
||||
inline Cast_type
|
||||
float_mem_cast(const Data_type & data)
|
||||
{
|
||||
// Only cast IEEE floating-point numbers, and only to a same-sized integer.
|
||||
BOOST_STATIC_ASSERT(sizeof(Cast_type) == sizeof(Data_type));
|
||||
BOOST_STATIC_ASSERT(std::numeric_limits<Data_type>::is_iec559);
|
||||
BOOST_STATIC_ASSERT(std::numeric_limits<Cast_type>::is_integer);
|
||||
Cast_type result;
|
||||
std::memcpy(&result, &data, sizeof(Cast_type));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief @c float_sort with casting to the appropriate size.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_float_sort.htm"> windows_float_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_float_sort.htm"> osx_float_sort</a>
|
||||
|
||||
|
||||
|
||||
\par A simple example of sorting some floating-point is:
|
||||
\code
|
||||
vector<float> vec;
|
||||
vec.push_back(1.0);
|
||||
vec.push_back(2.3);
|
||||
vec.push_back(1.3);
|
||||
spreadsort(vec.begin(), vec.end());
|
||||
\endcode
|
||||
\par The sorted vector contains ascending values "1.0 1.3 2.3".
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::float_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using range.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
*/
|
||||
template <class Range>
|
||||
inline void float_sort(Range& range)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using random access iterators with just right-shift functor.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift rshift)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::float_sort(first, last, rshift(*first, 0), rshift);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using range with just right-shift functor.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
*/
|
||||
template <class Range, class Right_shift>
|
||||
inline void float_sort(Range& range, Right_shift rshift)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range), rshift);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter, class Right_shift, class Compare>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift rshift, Compare comp)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last, comp);
|
||||
else
|
||||
detail::float_sort(first, last, rshift(*first, 0), rshift, comp);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Float sort algorithm using range with both right-shift and user-defined comparison operator.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
*/
|
||||
|
||||
template <class Range, class Right_shift, class Compare>
|
||||
inline void float_sort(Range& range, Right_shift rshift, Compare comp)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range), rshift, comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
//Templated Spreadsort-based implementation of float_sort and float_mem_cast
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
float_mem_cast fix provided by:
|
||||
Scott McMurray
|
||||
*/
|
||||
|
||||
#ifndef BOOST_FLOAT_SORT_HPP
|
||||
#define BOOST_FLOAT_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/float_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
|
||||
/*!
|
||||
\brief Casts a float to the specified integer type.
|
||||
|
||||
\tparam Data_type Floating-point IEEE 754/IEC559 type.
|
||||
\tparam Cast_type Integer type (same size) to which to cast.
|
||||
|
||||
\par Example:
|
||||
\code
|
||||
struct rightshift {
|
||||
int operator()(const DATA_TYPE &x, const unsigned offset) const {
|
||||
return float_mem_cast<KEY_TYPE, CAST_TYPE>(x.key) >> offset;
|
||||
}
|
||||
};
|
||||
\endcode
|
||||
*/
|
||||
template<class Data_type, class Cast_type>
|
||||
inline Cast_type
|
||||
float_mem_cast(const Data_type & data)
|
||||
{
|
||||
// Only cast IEEE floating-point numbers, and only to a same-sized integer.
|
||||
BOOST_STATIC_ASSERT(sizeof(Cast_type) == sizeof(Data_type));
|
||||
BOOST_STATIC_ASSERT(std::numeric_limits<Data_type>::is_iec559);
|
||||
BOOST_STATIC_ASSERT(std::numeric_limits<Cast_type>::is_integer);
|
||||
Cast_type result;
|
||||
std::memcpy(&result, &data, sizeof(Cast_type));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief @c float_sort with casting to the appropriate size.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_float_sort.htm"> windows_float_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_float_sort.htm"> osx_float_sort</a>
|
||||
|
||||
|
||||
|
||||
\par A simple example of sorting some floating-point is:
|
||||
\code
|
||||
vector<float> vec;
|
||||
vec.push_back(1.0);
|
||||
vec.push_back(2.3);
|
||||
vec.push_back(1.3);
|
||||
spreadsort(vec.begin(), vec.end());
|
||||
\endcode
|
||||
\par The sorted vector contains ascending values "1.0 1.3 2.3".
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::float_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using range.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
*/
|
||||
template <class Range>
|
||||
inline void float_sort(Range& range)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using random access iterators with just right-shift functor.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift rshift)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::float_sort(first, last, rshift(*first, 0), rshift);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Floating-point sort algorithm using range with just right-shift functor.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
*/
|
||||
template <class Range, class Right_shift>
|
||||
inline void float_sort(Range& range, Right_shift rshift)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range), rshift);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter, class Right_shift, class Compare>
|
||||
inline void float_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift rshift, Compare comp)
|
||||
{
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last, comp);
|
||||
else
|
||||
detail::float_sort(first, last, rshift(*first, 0), rshift, comp);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Float sort algorithm using range with both right-shift and user-defined comparison operator.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] rshift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
*/
|
||||
|
||||
template <class Range, class Right_shift, class Compare>
|
||||
inline void float_sort(Range& range, Right_shift rshift, Compare comp)
|
||||
{
|
||||
float_sort(boost::begin(range), boost::end(range), rshift, comp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,315 +1,315 @@
|
||||
//Templated Spreadsort-based implementation of integer_sort
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
|
||||
Doxygen comments by Paul A. Bristow Jan 2015
|
||||
|
||||
*/
|
||||
|
||||
#ifndef BOOST_INTEGER_SORT_HPP
|
||||
#define BOOST_INTEGER_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/integer_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
//Top-level sorting call for integers.
|
||||
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
// Don't sort if it's too small to optimize.
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::integer_sort(first, last, *first >> 0);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using range.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class Range>
|
||||
inline void integer_sort(Range& range)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] shift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\return @c void.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift, class Compare>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift shift, Compare comp) {
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last, comp);
|
||||
else
|
||||
detail::integer_sort(first, last, shift(*first, 0), shift, comp);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using range with both right-shift and user-defined comparison operator.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] shift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\return @c void.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
*/
|
||||
template <class Range, class Right_shift, class Compare>
|
||||
inline void integer_sort(Range& range, Right_shift shift, Compare comp)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range), shift, comp);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators with just right-shift functor.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
|
||||
\par Performance:
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
* <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>\n
|
||||
* <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] shift A functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift shift) {
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::integer_sort(first, last, shift(*first, 0), shift);
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Integer sort algorithm using range with just right-shift functor.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
|
||||
\par Performance:
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
* <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>\n
|
||||
* <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] shift A functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class Range, class Right_shift>
|
||||
inline void integer_sort(Range& range, Right_shift shift)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range), shift);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//Templated Spreadsort-based implementation of integer_sort
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2014.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
|
||||
Doxygen comments by Paul A. Bristow Jan 2015
|
||||
|
||||
*/
|
||||
|
||||
#ifndef BOOST_INTEGER_SORT_HPP
|
||||
#define BOOST_INTEGER_SORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/sort/spreadsort/detail/constants.hpp>
|
||||
#include <boost/sort/spreadsort/detail/integer_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
namespace spreadsort {
|
||||
//Top-level sorting call for integers.
|
||||
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
// Don't sort if it's too small to optimize.
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::integer_sort(first, last, *first >> 0);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using range.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class Range>
|
||||
inline void integer_sort(Range& range)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] shift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\return @c void.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift, class Compare>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift shift, Compare comp) {
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last, comp);
|
||||
else
|
||||
detail::integer_sort(first, last, shift(*first, 0), shift, comp);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using range with both right-shift and user-defined comparison operator.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
<a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>
|
||||
\n
|
||||
<a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] shift Functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
\param[in] comp A binary functor that returns whether the first element passed to it should go before the second in order.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\return @c void.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
*/
|
||||
template <class Range, class Right_shift, class Compare>
|
||||
inline void integer_sort(Range& range, Right_shift shift, Compare comp)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range), shift, comp);
|
||||
}
|
||||
|
||||
/*! \brief Integer sort algorithm using random access iterators with just right-shift functor.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
|
||||
\par Performance:
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
* <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>\n
|
||||
* <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
\param[in] shift A functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class RandomAccessIter, class Right_shift>
|
||||
inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
|
||||
Right_shift shift) {
|
||||
if (last - first < detail::min_sort_size)
|
||||
std::sort(first, last);
|
||||
else
|
||||
detail::integer_sort(first, last, shift(*first, 0), shift);
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Integer sort algorithm using range with just right-shift functor.
|
||||
(All variants fall back to @c std::sort if the data size is too small, < @c detail::min_sort_size).
|
||||
|
||||
\details @c integer_sort is a fast templated in-place hybrid radix/comparison algorithm,
|
||||
which in testing tends to be roughly 50% to 2X faster than @c std::sort for large tests (>=100kB).\n
|
||||
|
||||
\par Performance:
|
||||
Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>,
|
||||
so @c integer_sort is asymptotically faster
|
||||
than pure comparison-based algorithms. @c s is @c max_splits, which defaults to 11,
|
||||
so its worst-case with default settings for 32-bit integers is
|
||||
<em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).\n\n
|
||||
Some performance plots of runtime vs. n and log(range) are provided:\n
|
||||
* <a href="../../doc/graph/windows_integer_sort.htm"> windows_integer_sort</a>\n
|
||||
* <a href="../../doc/graph/osx_integer_sort.htm"> osx_integer_sort</a>
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
\param[in] shift A functor that returns the result of shifting the value_type right a specified number of bits.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
|
||||
\throws std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves),
|
||||
the right shift, subtraction of right-shifted elements, functors,
|
||||
or any operations on iterators throw.
|
||||
|
||||
\warning Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
|
||||
\warning Invalid arguments cause undefined behaviour.
|
||||
\note @c spreadsort function provides a wrapper that calls the fastest sorting algorithm available for a data type,
|
||||
enabling faster generic-programming.
|
||||
|
||||
\remark The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where:
|
||||
\remark * N is @c last - @c first,
|
||||
\remark * K is the log of the range in bits (32 for 32-bit integers using their full range),
|
||||
\remark * S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
|
||||
|
||||
*/
|
||||
template <class Range, class Right_shift>
|
||||
inline void integer_sort(Range& range, Right_shift shift)
|
||||
{
|
||||
integer_sort(boost::begin(range), boost::end(range), shift);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,169 +1,169 @@
|
||||
// Templated generic hybrid sorting
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2009.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
float_mem_cast fix provided by:
|
||||
Scott McMurray
|
||||
Range support provided by:
|
||||
Alexander Zaitsev
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_HPP
|
||||
#define BOOST_SORT_SPREADSORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <limits>
|
||||
#include <boost/type_traits.hpp>
|
||||
#include <boost/sort/spreadsort/integer_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
|
||||
/*! Namespace for spreadsort sort variants for different data types.
|
||||
\note Use hyperlinks (coloured) to get detailed information about functions.
|
||||
*/
|
||||
namespace spreadsort {
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting integer-type elements so call to @c integer_sort.
|
||||
\details If the data type provided is an integer, @c integer_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c< std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer,
|
||||
void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
integer_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting float element type so call to @c float_sort.
|
||||
\details If the data type provided is a float or castable-float, @c float_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c< !std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer
|
||||
&& std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_iec559,
|
||||
void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
float_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting string element type so call to @c string_sort for @c std::strings.
|
||||
\details If the data type provided is a string, @c string_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c<
|
||||
is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
|
||||
typename std::string>::value, void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
string_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting string element type so call to @c string_sort for @c std::wstrings.
|
||||
\details If the data type provided is a wstring, @c string_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits. Also, 2-byte wide-characters are the limit above which string_sort is inefficient, so on platforms with wider characters, this will not accept wstrings.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c<
|
||||
is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
|
||||
typename std::wstring>::value &&
|
||||
sizeof(wchar_t) == 2, void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
boost::uint16_t unused = 0;
|
||||
string_sort(first, last, unused);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detects value_type and calls required sort function.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class Range>
|
||||
void spreadsort(Range& range)
|
||||
{
|
||||
spreadsort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
|
||||
} // namespace spreadsort
|
||||
} // namespace sort
|
||||
} // namespace boost
|
||||
|
||||
#endif
|
||||
// Templated generic hybrid sorting
|
||||
|
||||
// Copyright Steven J. Ross 2001 - 2009.
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort/ for library home page.
|
||||
|
||||
/*
|
||||
Some improvements suggested by:
|
||||
Phil Endecott and Frank Gennari
|
||||
float_mem_cast fix provided by:
|
||||
Scott McMurray
|
||||
Range support provided by:
|
||||
Alexander Zaitsev
|
||||
*/
|
||||
|
||||
#ifndef BOOST_SORT_SPREADSORT_HPP
|
||||
#define BOOST_SORT_SPREADSORT_HPP
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <limits>
|
||||
#include <boost/type_traits.hpp>
|
||||
#include <boost/sort/spreadsort/integer_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/range/begin.hpp>
|
||||
#include <boost/range/end.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace sort {
|
||||
|
||||
/*! Namespace for spreadsort sort variants for different data types.
|
||||
\note Use hyperlinks (coloured) to get detailed information about functions.
|
||||
*/
|
||||
namespace spreadsort {
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting integer-type elements so call to @c integer_sort.
|
||||
\details If the data type provided is an integer, @c integer_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c< std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer,
|
||||
void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
integer_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting float element type so call to @c float_sort.
|
||||
\details If the data type provided is a float or castable-float, @c float_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c< !std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer
|
||||
&& std::numeric_limits<
|
||||
typename std::iterator_traits<RandomAccessIter>::value_type >::is_iec559,
|
||||
void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
float_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting string element type so call to @c string_sort for @c std::strings.
|
||||
\details If the data type provided is a string, @c string_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c<
|
||||
is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
|
||||
typename std::string>::value, void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
string_sort(first, last);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detecting string element type so call to @c string_sort for @c std::wstrings.
|
||||
\details If the data type provided is a wstring, @c string_sort is used.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits. Also, 2-byte wide-characters are the limit above which string_sort is inefficient, so on platforms with wider characters, this will not accept wstrings.
|
||||
|
||||
\param[in] first Iterator pointer to first element.
|
||||
\param[in] last Iterator pointing to one beyond the end of data.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\pre @c RandomAccessIter @c value_type is mutable.
|
||||
\pre @c RandomAccessIter @c value_type is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a>
|
||||
\pre @c RandomAccessIter @c value_type supports the @c operator>>,
|
||||
which returns an integer-type right-shifted a specified number of bits.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
template <class RandomAccessIter>
|
||||
inline typename boost::enable_if_c<
|
||||
is_same<typename std::iterator_traits<RandomAccessIter>::value_type,
|
||||
typename std::wstring>::value &&
|
||||
sizeof(wchar_t) == 2, void >::type
|
||||
spreadsort(RandomAccessIter first, RandomAccessIter last)
|
||||
{
|
||||
boost::uint16_t unused = 0;
|
||||
string_sort(first, last, unused);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Generic @c spreadsort variant detects value_type and calls required sort function.
|
||||
\note Sorting other data types requires picking between @c integer_sort, @c float_sort and @c string_sort directly,
|
||||
as @c spreadsort won't accept types that don't have the appropriate @c type_traits.
|
||||
|
||||
\param[in] range Range [first, last) for sorting.
|
||||
|
||||
\pre [@c first, @c last) is a valid range.
|
||||
\post The elements in the range [@c first, @c last) are sorted in ascending order.
|
||||
*/
|
||||
|
||||
template <class Range>
|
||||
void spreadsort(Range& range)
|
||||
{
|
||||
spreadsort(boost::begin(range), boost::end(range));
|
||||
}
|
||||
|
||||
|
||||
} // namespace spreadsort
|
||||
} // namespace sort
|
||||
} // namespace boost
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+15
-15
@@ -1,15 +1,15 @@
|
||||
<!-- Automatic redirection to Quickbook/Doxygen version of documentation. -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
|
||||
</head>
|
||||
<body>
|
||||
Automatic redirection failed, please go to
|
||||
<a href="doc/html/index.html">doc/html/index.html</a>
|
||||
<hr>
|
||||
<p>© Copyright Steven Ross 2009-2014</p>
|
||||
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy
|
||||
at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
|
||||
</body>
|
||||
</html>
|
||||
<!-- Automatic redirection to Quickbook/Doxygen version of documentation. -->
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; URL=doc/html/index.html">
|
||||
</head>
|
||||
<body>
|
||||
Automatic redirection failed, please go to
|
||||
<a href="doc/html/index.html">doc/html/index.html</a>
|
||||
<hr>
|
||||
<p>© Copyright Steven Ross 2009-2014</p>
|
||||
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy
|
||||
at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+131
-131
@@ -1,131 +1,131 @@
|
||||
// Boost Sort library int_test.cpp file ------------------------------------//
|
||||
|
||||
// Copyright Steven Ross 2009-2014. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/cstdint.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct rightshift {
|
||||
int operator()(int x, unsigned offset) { return x >> offset; }
|
||||
};
|
||||
|
||||
struct rightshift_max {
|
||||
boost::intmax_t operator()(const boost::intmax_t &x, unsigned offset) {
|
||||
return x >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
struct negrightshift {
|
||||
int operator()(const int &x, const unsigned offset) { return -(x >> offset); }
|
||||
};
|
||||
|
||||
struct negrightshift_max {
|
||||
boost::intmax_t operator()(const boost::intmax_t &x, const unsigned offset) {
|
||||
return -(x >> offset);
|
||||
}
|
||||
};
|
||||
|
||||
boost::int32_t
|
||||
rand_32(bool sign = true) {
|
||||
boost::int32_t result = rand() | (rand()<< 16);
|
||||
if (rand() % 2)
|
||||
result |= 1 << 15;
|
||||
//Adding the sign bit
|
||||
if (sign && (rand() % 2))
|
||||
result *= -1;
|
||||
return result;
|
||||
}
|
||||
|
||||
void int_test()
|
||||
{
|
||||
// Prepare inputs
|
||||
vector<int> base_vec;
|
||||
unsigned count = 100000;
|
||||
srand(1);
|
||||
//Generating semirandom numbers
|
||||
for (unsigned u = 0; u < count; ++u)
|
||||
base_vec.push_back(rand_32());
|
||||
vector<int> sorted_vec = base_vec;
|
||||
vector<int> test_vec = base_vec;
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end());
|
||||
//Testing basic call
|
||||
integer_sort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//boost::sort::spreadsort variant
|
||||
test_vec = base_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//One functor
|
||||
test_vec = base_vec;
|
||||
integer_sort(test_vec.begin(), test_vec.end(), rightshift());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Both functors
|
||||
test_vec = base_vec;
|
||||
integer_sort(test_vec.begin(), test_vec.end(), rightshift(), less<int>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end(), greater<int>());
|
||||
integer_sort(test_vec.begin(), test_vec.end(), negrightshift(),
|
||||
greater<int>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
|
||||
//Making sure we're correctly sorting boost::intmax_ts; should use std::sort
|
||||
vector<boost::intmax_t> long_base_vec;
|
||||
for (unsigned u = 0; u < base_vec.size(); ++u)
|
||||
long_base_vec.push_back((((boost::intmax_t)rand_32()) <<
|
||||
((8 * sizeof(int)) -1)) + rand_32(false));
|
||||
vector<boost::intmax_t> long_sorted_vec = long_base_vec;
|
||||
vector<boost::intmax_t> long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end());
|
||||
std::sort(long_sorted_vec.begin(), long_sorted_vec.end());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//One functor
|
||||
long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//Both functors
|
||||
long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max(),
|
||||
less<boost::intmax_t>());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//reverse order
|
||||
std::sort(long_sorted_vec.begin(), long_sorted_vec.end(),
|
||||
greater<boost::intmax_t>());
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), negrightshift_max(),
|
||||
greater<boost::intmax_t>());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
}
|
||||
|
||||
// Verify that 0 and 1 elements work correctly.
|
||||
void corner_test() {
|
||||
vector<int> test_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
const int test_value = 42;
|
||||
test_vec.push_back(test_value);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec.size() == 1);
|
||||
BOOST_CHECK(test_vec[0] == test_value);
|
||||
}
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
int_test();
|
||||
corner_test();
|
||||
return 0;
|
||||
}
|
||||
// Boost Sort library int_test.cpp file ------------------------------------//
|
||||
|
||||
// Copyright Steven Ross 2009-2014. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/cstdint.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
|
||||
struct rightshift {
|
||||
int operator()(int x, unsigned offset) { return x >> offset; }
|
||||
};
|
||||
|
||||
struct rightshift_max {
|
||||
boost::intmax_t operator()(const boost::intmax_t &x, unsigned offset) {
|
||||
return x >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
struct negrightshift {
|
||||
int operator()(const int &x, const unsigned offset) { return -(x >> offset); }
|
||||
};
|
||||
|
||||
struct negrightshift_max {
|
||||
boost::intmax_t operator()(const boost::intmax_t &x, const unsigned offset) {
|
||||
return -(x >> offset);
|
||||
}
|
||||
};
|
||||
|
||||
boost::int32_t
|
||||
rand_32(bool sign = true) {
|
||||
boost::int32_t result = rand() | (rand()<< 16);
|
||||
if (rand() % 2)
|
||||
result |= 1 << 15;
|
||||
//Adding the sign bit
|
||||
if (sign && (rand() % 2))
|
||||
result *= -1;
|
||||
return result;
|
||||
}
|
||||
|
||||
void int_test()
|
||||
{
|
||||
// Prepare inputs
|
||||
vector<int> base_vec;
|
||||
unsigned count = 100000;
|
||||
srand(1);
|
||||
//Generating semirandom numbers
|
||||
for (unsigned u = 0; u < count; ++u)
|
||||
base_vec.push_back(rand_32());
|
||||
vector<int> sorted_vec = base_vec;
|
||||
vector<int> test_vec = base_vec;
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end());
|
||||
//Testing basic call
|
||||
integer_sort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//boost::sort::spreadsort variant
|
||||
test_vec = base_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//One functor
|
||||
test_vec = base_vec;
|
||||
integer_sort(test_vec.begin(), test_vec.end(), rightshift());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Both functors
|
||||
test_vec = base_vec;
|
||||
integer_sort(test_vec.begin(), test_vec.end(), rightshift(), less<int>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end(), greater<int>());
|
||||
integer_sort(test_vec.begin(), test_vec.end(), negrightshift(),
|
||||
greater<int>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
|
||||
//Making sure we're correctly sorting boost::intmax_ts; should use std::sort
|
||||
vector<boost::intmax_t> long_base_vec;
|
||||
for (unsigned u = 0; u < base_vec.size(); ++u)
|
||||
long_base_vec.push_back((((boost::intmax_t)rand_32()) <<
|
||||
((8 * sizeof(int)) -1)) + rand_32(false));
|
||||
vector<boost::intmax_t> long_sorted_vec = long_base_vec;
|
||||
vector<boost::intmax_t> long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end());
|
||||
std::sort(long_sorted_vec.begin(), long_sorted_vec.end());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//One functor
|
||||
long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//Both functors
|
||||
long_test_vec = long_base_vec;
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max(),
|
||||
less<boost::intmax_t>());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
//reverse order
|
||||
std::sort(long_sorted_vec.begin(), long_sorted_vec.end(),
|
||||
greater<boost::intmax_t>());
|
||||
integer_sort(long_test_vec.begin(), long_test_vec.end(), negrightshift_max(),
|
||||
greater<boost::intmax_t>());
|
||||
BOOST_CHECK(long_test_vec == long_sorted_vec);
|
||||
}
|
||||
|
||||
// Verify that 0 and 1 elements work correctly.
|
||||
void corner_test() {
|
||||
vector<int> test_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
const int test_value = 42;
|
||||
test_vec.push_back(test_value);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec.size() == 1);
|
||||
BOOST_CHECK(test_vec[0] == test_value);
|
||||
}
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
int_test();
|
||||
corner_test();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+294
-294
@@ -1,294 +1,294 @@
|
||||
// Boost Sort library tests for integer_sort and float_sort details.
|
||||
|
||||
// Copyright Steven Ross 2014. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/cstdint.hpp>
|
||||
#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
|
||||
#include <boost/sort/spreadsort/detail/integer_sort.hpp>
|
||||
#include <boost/sort/spreadsort/detail/float_sort.hpp>
|
||||
#include <boost/sort/spreadsort/detail/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace boost::sort::spreadsort::detail;
|
||||
|
||||
namespace {
|
||||
|
||||
struct int_right_shift {
|
||||
int operator()(const int x, const unsigned offset) const {
|
||||
return x >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
struct float_right_shift {
|
||||
int operator()(const float x, const unsigned offset) const {
|
||||
return float_mem_cast<float, int>(x) >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
const int max_int_bits = sizeof(boost::uintmax_t) * 8;
|
||||
const int max_size_bits = sizeof(size_t) * 8;
|
||||
const boost::uintmax_t one = 1;
|
||||
|
||||
// spreadsort won't recurse for inputs smaller than min_count.
|
||||
const int int_min_log_count =
|
||||
(std::min)((int)int_log_finishing_count,
|
||||
(int)int_log_mean_bin_size + int_log_min_split_count);
|
||||
const int float_min_log_count =
|
||||
(std::min)((int)float_log_finishing_count,
|
||||
(int)float_log_mean_bin_size + float_log_min_split_count);
|
||||
const unsigned absolute_min_count = (std::min)(1 << int_min_log_count,
|
||||
1 << float_min_log_count);
|
||||
|
||||
// Verify that roughlog2 is floor(log base 2) + 1.
|
||||
void roughlog2_test()
|
||||
{
|
||||
for (boost::uintmax_t i = 0; i < max_int_bits; ++i) {
|
||||
BOOST_CHECK(detail::rough_log_2_size(one << i) == i + 1);
|
||||
BOOST_CHECK(detail::rough_log_2_size((one << i) - 1) == i);
|
||||
}
|
||||
}
|
||||
|
||||
// Test the worst-case performance handling, and assure that is using the
|
||||
// correct formula for the worst-case number of radix iterations.
|
||||
template<unsigned log_mean_bin_size, unsigned log_min_split_count,
|
||||
unsigned log_finishing_count>
|
||||
void get_min_count_test()
|
||||
{
|
||||
const unsigned min_log_size = log_mean_bin_size + log_min_split_count;
|
||||
size_t prev_min_count = absolute_min_count;
|
||||
for (int log_range = 0; log_range <= max_int_bits; ++log_range) {
|
||||
size_t min_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_range);
|
||||
BOOST_CHECK(min_count >= prev_min_count);
|
||||
prev_min_count = min_count;
|
||||
// When the range is really small, the radix sort will complete in one
|
||||
// iteration and worst-case handling doesn't apply. The code below
|
||||
// guarantees the worst-case number of radix sorting iteration.
|
||||
if (log_range > min_log_size) {
|
||||
BOOST_CHECK(min_count >= (1 << min_log_size));
|
||||
int iterations = rough_log_2_size(min_count) - min_log_size;
|
||||
BOOST_CHECK(iterations >= 1);
|
||||
int base_iterations = max_splits - log_min_split_count;
|
||||
int covered_log_range = 0;
|
||||
if (iterations > base_iterations) {
|
||||
covered_log_range += max_splits * (iterations - base_iterations);
|
||||
} else {
|
||||
base_iterations = iterations;
|
||||
}
|
||||
// sum of n to n + x = ((x + 1) * (n + (n + x)))/2 + log_mean_bin_size
|
||||
covered_log_range +=
|
||||
(base_iterations * (log_min_split_count * 2 + base_iterations - 1))/2 +
|
||||
log_mean_bin_size;
|
||||
BOOST_CHECK(covered_log_range >= log_range);
|
||||
BOOST_CHECK(covered_log_range - max_splits < log_range);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test the decision of how many pieces to split up the radix sort into
|
||||
// (roughly 2^(log_range - log_divisor)) to make sure the results are logical.
|
||||
void get_log_divisor_test()
|
||||
{
|
||||
for (int log_range = 0; log_range <= max_int_bits; ++log_range) {
|
||||
int prev_log_divisor = max_int_bits +
|
||||
(std::max)((int)int_log_mean_bin_size, (int)float_log_mean_bin_size);
|
||||
for (int log_count = 0; log_count < max_size_bits; ++log_count) {
|
||||
size_t count = (one << log_count) - 1;
|
||||
BOOST_CHECK(rough_log_2_size(count) == (unsigned)log_count);
|
||||
int log_divisor =
|
||||
get_log_divisor<int_log_mean_bin_size>(count, log_range);
|
||||
// Only process counts >= int_log_finishing_count in this function.
|
||||
if (count >= absolute_min_count)
|
||||
BOOST_CHECK(log_divisor <= log_range);
|
||||
// More pieces should be used the larger count is.
|
||||
BOOST_CHECK(log_divisor <= prev_log_divisor);
|
||||
prev_log_divisor = log_divisor;
|
||||
BOOST_CHECK(log_divisor >= 0);
|
||||
if (log_range > log_count) {
|
||||
BOOST_CHECK(log_range - log_divisor <= max_splits);
|
||||
} else if (log_range <= max_finishing_splits) {
|
||||
BOOST_CHECK(log_divisor == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Verify that is_sorted_or_find_extremes returns true if the data is sorted,
|
||||
// and otherwise returns the actual min and max.
|
||||
void is_sorted_or_find_extremes_test()
|
||||
{
|
||||
vector<int> input;
|
||||
input.push_back(3);
|
||||
input.push_back(5);
|
||||
input.push_back(1);
|
||||
// Test a sorted input.
|
||||
vector<int> sorted_input(input);
|
||||
std::sort(sorted_input.begin(), sorted_input.end());
|
||||
vector<int>::iterator max, min;
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(), max, min));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(input.begin(), input.end(),
|
||||
max, min));
|
||||
BOOST_CHECK(*min == 1);
|
||||
BOOST_CHECK(*max == 5);
|
||||
// Test the comparison function version.
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(), max, min,
|
||||
std::less<int>()));
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(),
|
||||
max, min,
|
||||
std::greater<int>()));
|
||||
BOOST_CHECK(*min == 5);
|
||||
BOOST_CHECK(*max == 1);
|
||||
|
||||
// Test with floats
|
||||
vector<float> float_input;
|
||||
float_input.push_back(.3f);
|
||||
float_input.push_back(4.0f);
|
||||
float_input.push_back(.1f);
|
||||
vector<float> sorted_float_input(float_input);
|
||||
std::sort(sorted_float_input.begin(), sorted_float_input.end());
|
||||
// Test cast_float_iter
|
||||
int cast_min = detail::cast_float_iter<int, vector<float>::iterator>(
|
||||
sorted_float_input.begin());
|
||||
int cast_max = detail::cast_float_iter<int, vector<float>::iterator>(
|
||||
sorted_float_input.end() - 1);
|
||||
BOOST_CHECK(cast_min == float_right_shift()(.1f, 0));
|
||||
BOOST_CHECK(cast_max == float_right_shift()(4.0f, 0));
|
||||
// Test a sorted input
|
||||
int div_max, div_min;
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_float_input.begin(),
|
||||
sorted_float_input.end(),
|
||||
div_max, div_min));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(float_input.begin(),
|
||||
float_input.end(),
|
||||
div_max, div_min));
|
||||
BOOST_CHECK(div_min == cast_min);
|
||||
BOOST_CHECK(div_max == cast_max);
|
||||
|
||||
// Test with a right_shift functor.
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_float_input.begin(),
|
||||
sorted_float_input.end(),
|
||||
div_max, div_min,
|
||||
float_right_shift()));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(float_input.begin(),
|
||||
float_input.end(), div_max,
|
||||
div_min,
|
||||
float_right_shift()));
|
||||
BOOST_CHECK(div_min == float_right_shift()(.1f, 0));
|
||||
BOOST_CHECK(div_max == float_right_shift()(4.0f, 0));
|
||||
}
|
||||
|
||||
// Make sure bins are created correctly.
|
||||
void size_bins_test() {
|
||||
size_t bin_sizes[1 << detail::max_finishing_splits];
|
||||
bin_sizes[0] = 1;
|
||||
bin_sizes[2] = 7;
|
||||
const int old_bin_value = 7;
|
||||
std::vector<int> old_bins;
|
||||
old_bins.push_back(old_bin_value);
|
||||
std::vector<vector<int>::iterator> bin_cache;
|
||||
bin_cache.push_back(old_bins.begin());
|
||||
unsigned cache_offset = 1;
|
||||
unsigned cache_end;
|
||||
const unsigned bin_count = 2;
|
||||
std::vector<int>::iterator *new_cache_start =
|
||||
size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
|
||||
BOOST_CHECK((new_cache_start - &bin_cache[0]) == cache_offset);
|
||||
BOOST_CHECK(bin_sizes[0] == 0);
|
||||
BOOST_CHECK(bin_sizes[1] == 0);
|
||||
BOOST_CHECK(bin_sizes[2] == 7); // shouldn't modify past bin_count
|
||||
BOOST_CHECK(cache_end == 3);
|
||||
BOOST_CHECK(bin_cache.size() == cache_end);
|
||||
BOOST_CHECK(old_bins[0] == old_bin_value);
|
||||
}
|
||||
|
||||
// Test the specialized 3-way swap loops.
|
||||
void swap_loop_test() {
|
||||
size_t bin_sizes[1 << detail::max_finishing_splits];
|
||||
bin_sizes[0] = bin_sizes[1] = 2;
|
||||
bin_sizes[2] = 1;
|
||||
|
||||
// test integer swap loop
|
||||
vector<int> ints;
|
||||
const int int_div_min = 3;
|
||||
const int int_log_divisor = 1;
|
||||
const unsigned int_offset = int_div_min << int_log_divisor;
|
||||
ints.push_back(2 + int_offset);
|
||||
ints.push_back(1 + int_offset); // stays in place
|
||||
ints.push_back(4 + int_offset);
|
||||
ints.push_back(3 + int_offset);
|
||||
ints.push_back(0 + int_offset);
|
||||
vector<vector<int>::iterator> int_bin_vector;
|
||||
int_bin_vector.push_back(ints.begin());
|
||||
int_bin_vector.push_back(int_bin_vector[0] + bin_sizes[0]);
|
||||
int_bin_vector.push_back(int_bin_vector[1] + bin_sizes[1]);
|
||||
vector<int>::iterator next_int_bin_start = int_bin_vector[0];
|
||||
vector<int>::iterator *int_bins = &int_bin_vector[0];
|
||||
int_right_shift integer_right_shift;
|
||||
swap_loop(int_bins, next_int_bin_start, 0, integer_right_shift, bin_sizes,
|
||||
int_log_divisor, int_div_min);
|
||||
for (unsigned i = 0; i < ints.size(); ++i) {
|
||||
BOOST_CHECK(ints[i] == int(int_offset + i));
|
||||
}
|
||||
BOOST_CHECK(next_int_bin_start == ints.begin() + bin_sizes[0]);
|
||||
|
||||
// test float swap loop
|
||||
vector<float> floats;
|
||||
const int float_four_as_int = float_mem_cast<float, int>(4.0f);
|
||||
const int float_log_divisor =
|
||||
rough_log_2_size(float_mem_cast<float, int>(5.0f) - float_four_as_int);
|
||||
const int float_div_min = float_four_as_int >> float_log_divisor;
|
||||
floats.push_back(6.0f);
|
||||
floats.push_back(5.0f); // stays in place
|
||||
floats.push_back(8.0f);
|
||||
floats.push_back(7.0f);
|
||||
floats.push_back(4.0f);
|
||||
vector<vector<float>::iterator> float_bin_vector;
|
||||
float_bin_vector.push_back(floats.begin());
|
||||
float_bin_vector.push_back(float_bin_vector[0] + bin_sizes[0]);
|
||||
float_bin_vector.push_back(float_bin_vector[1] + bin_sizes[1]);
|
||||
vector<float>::iterator next_float_bin_start = float_bin_vector[0];
|
||||
vector<float>::iterator *float_bins = &float_bin_vector[0];
|
||||
float_swap_loop(float_bins, next_float_bin_start, 0, bin_sizes,
|
||||
float_log_divisor, float_div_min);
|
||||
for (unsigned i = 0; i < floats.size(); ++i) {
|
||||
BOOST_CHECK(floats[i] == 4.0f + i);
|
||||
}
|
||||
BOOST_CHECK(next_float_bin_start == floats.begin() + bin_sizes[0]);
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
roughlog2_test();
|
||||
get_min_count_test<int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>();
|
||||
get_min_count_test<float_log_mean_bin_size, float_log_min_split_count,
|
||||
float_log_finishing_count>();
|
||||
get_log_divisor_test();
|
||||
is_sorted_or_find_extremes_test();
|
||||
size_bins_test();
|
||||
swap_loop_test();
|
||||
return 0;
|
||||
}
|
||||
// Boost Sort library tests for integer_sort and float_sort details.
|
||||
|
||||
// Copyright Steven Ross 2014. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/cstdint.hpp>
|
||||
#include <boost/sort/spreadsort/detail/spreadsort_common.hpp>
|
||||
#include <boost/sort/spreadsort/detail/integer_sort.hpp>
|
||||
#include <boost/sort/spreadsort/detail/float_sort.hpp>
|
||||
#include <boost/sort/spreadsort/detail/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/float_sort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
using namespace boost::sort::spreadsort::detail;
|
||||
|
||||
namespace {
|
||||
|
||||
struct int_right_shift {
|
||||
int operator()(const int x, const unsigned offset) const {
|
||||
return x >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
struct float_right_shift {
|
||||
int operator()(const float x, const unsigned offset) const {
|
||||
return float_mem_cast<float, int>(x) >> offset;
|
||||
}
|
||||
};
|
||||
|
||||
const int max_int_bits = sizeof(boost::uintmax_t) * 8;
|
||||
const int max_size_bits = sizeof(size_t) * 8;
|
||||
const boost::uintmax_t one = 1;
|
||||
|
||||
// spreadsort won't recurse for inputs smaller than min_count.
|
||||
const int int_min_log_count =
|
||||
(std::min)((int)int_log_finishing_count,
|
||||
(int)int_log_mean_bin_size + int_log_min_split_count);
|
||||
const int float_min_log_count =
|
||||
(std::min)((int)float_log_finishing_count,
|
||||
(int)float_log_mean_bin_size + float_log_min_split_count);
|
||||
const unsigned absolute_min_count = (std::min)(1 << int_min_log_count,
|
||||
1 << float_min_log_count);
|
||||
|
||||
// Verify that roughlog2 is floor(log base 2) + 1.
|
||||
void roughlog2_test()
|
||||
{
|
||||
for (boost::uintmax_t i = 0; i < max_int_bits; ++i) {
|
||||
BOOST_CHECK(detail::rough_log_2_size(one << i) == i + 1);
|
||||
BOOST_CHECK(detail::rough_log_2_size((one << i) - 1) == i);
|
||||
}
|
||||
}
|
||||
|
||||
// Test the worst-case performance handling, and assure that is using the
|
||||
// correct formula for the worst-case number of radix iterations.
|
||||
template<unsigned log_mean_bin_size, unsigned log_min_split_count,
|
||||
unsigned log_finishing_count>
|
||||
void get_min_count_test()
|
||||
{
|
||||
const unsigned min_log_size = log_mean_bin_size + log_min_split_count;
|
||||
size_t prev_min_count = absolute_min_count;
|
||||
for (int log_range = 0; log_range <= max_int_bits; ++log_range) {
|
||||
size_t min_count = get_min_count<log_mean_bin_size, log_min_split_count,
|
||||
log_finishing_count>(log_range);
|
||||
BOOST_CHECK(min_count >= prev_min_count);
|
||||
prev_min_count = min_count;
|
||||
// When the range is really small, the radix sort will complete in one
|
||||
// iteration and worst-case handling doesn't apply. The code below
|
||||
// guarantees the worst-case number of radix sorting iteration.
|
||||
if (log_range > min_log_size) {
|
||||
BOOST_CHECK(min_count >= (1 << min_log_size));
|
||||
int iterations = rough_log_2_size(min_count) - min_log_size;
|
||||
BOOST_CHECK(iterations >= 1);
|
||||
int base_iterations = max_splits - log_min_split_count;
|
||||
int covered_log_range = 0;
|
||||
if (iterations > base_iterations) {
|
||||
covered_log_range += max_splits * (iterations - base_iterations);
|
||||
} else {
|
||||
base_iterations = iterations;
|
||||
}
|
||||
// sum of n to n + x = ((x + 1) * (n + (n + x)))/2 + log_mean_bin_size
|
||||
covered_log_range +=
|
||||
(base_iterations * (log_min_split_count * 2 + base_iterations - 1))/2 +
|
||||
log_mean_bin_size;
|
||||
BOOST_CHECK(covered_log_range >= log_range);
|
||||
BOOST_CHECK(covered_log_range - max_splits < log_range);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Test the decision of how many pieces to split up the radix sort into
|
||||
// (roughly 2^(log_range - log_divisor)) to make sure the results are logical.
|
||||
void get_log_divisor_test()
|
||||
{
|
||||
for (int log_range = 0; log_range <= max_int_bits; ++log_range) {
|
||||
int prev_log_divisor = max_int_bits +
|
||||
(std::max)((int)int_log_mean_bin_size, (int)float_log_mean_bin_size);
|
||||
for (int log_count = 0; log_count < max_size_bits; ++log_count) {
|
||||
size_t count = (one << log_count) - 1;
|
||||
BOOST_CHECK(rough_log_2_size(count) == (unsigned)log_count);
|
||||
int log_divisor =
|
||||
get_log_divisor<int_log_mean_bin_size>(count, log_range);
|
||||
// Only process counts >= int_log_finishing_count in this function.
|
||||
if (count >= absolute_min_count)
|
||||
BOOST_CHECK(log_divisor <= log_range);
|
||||
// More pieces should be used the larger count is.
|
||||
BOOST_CHECK(log_divisor <= prev_log_divisor);
|
||||
prev_log_divisor = log_divisor;
|
||||
BOOST_CHECK(log_divisor >= 0);
|
||||
if (log_range > log_count) {
|
||||
BOOST_CHECK(log_range - log_divisor <= max_splits);
|
||||
} else if (log_range <= max_finishing_splits) {
|
||||
BOOST_CHECK(log_divisor == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Verify that is_sorted_or_find_extremes returns true if the data is sorted,
|
||||
// and otherwise returns the actual min and max.
|
||||
void is_sorted_or_find_extremes_test()
|
||||
{
|
||||
vector<int> input;
|
||||
input.push_back(3);
|
||||
input.push_back(5);
|
||||
input.push_back(1);
|
||||
// Test a sorted input.
|
||||
vector<int> sorted_input(input);
|
||||
std::sort(sorted_input.begin(), sorted_input.end());
|
||||
vector<int>::iterator max, min;
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(), max, min));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(input.begin(), input.end(),
|
||||
max, min));
|
||||
BOOST_CHECK(*min == 1);
|
||||
BOOST_CHECK(*max == 5);
|
||||
// Test the comparison function version.
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(), max, min,
|
||||
std::less<int>()));
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(sorted_input.begin(),
|
||||
sorted_input.end(),
|
||||
max, min,
|
||||
std::greater<int>()));
|
||||
BOOST_CHECK(*min == 5);
|
||||
BOOST_CHECK(*max == 1);
|
||||
|
||||
// Test with floats
|
||||
vector<float> float_input;
|
||||
float_input.push_back(.3f);
|
||||
float_input.push_back(4.0f);
|
||||
float_input.push_back(.1f);
|
||||
vector<float> sorted_float_input(float_input);
|
||||
std::sort(sorted_float_input.begin(), sorted_float_input.end());
|
||||
// Test cast_float_iter
|
||||
int cast_min = detail::cast_float_iter<int, vector<float>::iterator>(
|
||||
sorted_float_input.begin());
|
||||
int cast_max = detail::cast_float_iter<int, vector<float>::iterator>(
|
||||
sorted_float_input.end() - 1);
|
||||
BOOST_CHECK(cast_min == float_right_shift()(.1f, 0));
|
||||
BOOST_CHECK(cast_max == float_right_shift()(4.0f, 0));
|
||||
// Test a sorted input
|
||||
int div_max, div_min;
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_float_input.begin(),
|
||||
sorted_float_input.end(),
|
||||
div_max, div_min));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(float_input.begin(),
|
||||
float_input.end(),
|
||||
div_max, div_min));
|
||||
BOOST_CHECK(div_min == cast_min);
|
||||
BOOST_CHECK(div_max == cast_max);
|
||||
|
||||
// Test with a right_shift functor.
|
||||
BOOST_CHECK(detail::is_sorted_or_find_extremes(sorted_float_input.begin(),
|
||||
sorted_float_input.end(),
|
||||
div_max, div_min,
|
||||
float_right_shift()));
|
||||
// Test an unsorted input.
|
||||
BOOST_CHECK(!detail::is_sorted_or_find_extremes(float_input.begin(),
|
||||
float_input.end(), div_max,
|
||||
div_min,
|
||||
float_right_shift()));
|
||||
BOOST_CHECK(div_min == float_right_shift()(.1f, 0));
|
||||
BOOST_CHECK(div_max == float_right_shift()(4.0f, 0));
|
||||
}
|
||||
|
||||
// Make sure bins are created correctly.
|
||||
void size_bins_test() {
|
||||
size_t bin_sizes[1 << detail::max_finishing_splits];
|
||||
bin_sizes[0] = 1;
|
||||
bin_sizes[2] = 7;
|
||||
const int old_bin_value = 7;
|
||||
std::vector<int> old_bins;
|
||||
old_bins.push_back(old_bin_value);
|
||||
std::vector<vector<int>::iterator> bin_cache;
|
||||
bin_cache.push_back(old_bins.begin());
|
||||
unsigned cache_offset = 1;
|
||||
unsigned cache_end;
|
||||
const unsigned bin_count = 2;
|
||||
std::vector<int>::iterator *new_cache_start =
|
||||
size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
|
||||
BOOST_CHECK((new_cache_start - &bin_cache[0]) == cache_offset);
|
||||
BOOST_CHECK(bin_sizes[0] == 0);
|
||||
BOOST_CHECK(bin_sizes[1] == 0);
|
||||
BOOST_CHECK(bin_sizes[2] == 7); // shouldn't modify past bin_count
|
||||
BOOST_CHECK(cache_end == 3);
|
||||
BOOST_CHECK(bin_cache.size() == cache_end);
|
||||
BOOST_CHECK(old_bins[0] == old_bin_value);
|
||||
}
|
||||
|
||||
// Test the specialized 3-way swap loops.
|
||||
void swap_loop_test() {
|
||||
size_t bin_sizes[1 << detail::max_finishing_splits];
|
||||
bin_sizes[0] = bin_sizes[1] = 2;
|
||||
bin_sizes[2] = 1;
|
||||
|
||||
// test integer swap loop
|
||||
vector<int> ints;
|
||||
const int int_div_min = 3;
|
||||
const int int_log_divisor = 1;
|
||||
const unsigned int_offset = int_div_min << int_log_divisor;
|
||||
ints.push_back(2 + int_offset);
|
||||
ints.push_back(1 + int_offset); // stays in place
|
||||
ints.push_back(4 + int_offset);
|
||||
ints.push_back(3 + int_offset);
|
||||
ints.push_back(0 + int_offset);
|
||||
vector<vector<int>::iterator> int_bin_vector;
|
||||
int_bin_vector.push_back(ints.begin());
|
||||
int_bin_vector.push_back(int_bin_vector[0] + bin_sizes[0]);
|
||||
int_bin_vector.push_back(int_bin_vector[1] + bin_sizes[1]);
|
||||
vector<int>::iterator next_int_bin_start = int_bin_vector[0];
|
||||
vector<int>::iterator *int_bins = &int_bin_vector[0];
|
||||
int_right_shift integer_right_shift;
|
||||
swap_loop(int_bins, next_int_bin_start, 0, integer_right_shift, bin_sizes,
|
||||
int_log_divisor, int_div_min);
|
||||
for (unsigned i = 0; i < ints.size(); ++i) {
|
||||
BOOST_CHECK(ints[i] == int(int_offset + i));
|
||||
}
|
||||
BOOST_CHECK(next_int_bin_start == ints.begin() + bin_sizes[0]);
|
||||
|
||||
// test float swap loop
|
||||
vector<float> floats;
|
||||
const int float_four_as_int = float_mem_cast<float, int>(4.0f);
|
||||
const int float_log_divisor =
|
||||
rough_log_2_size(float_mem_cast<float, int>(5.0f) - float_four_as_int);
|
||||
const int float_div_min = float_four_as_int >> float_log_divisor;
|
||||
floats.push_back(6.0f);
|
||||
floats.push_back(5.0f); // stays in place
|
||||
floats.push_back(8.0f);
|
||||
floats.push_back(7.0f);
|
||||
floats.push_back(4.0f);
|
||||
vector<vector<float>::iterator> float_bin_vector;
|
||||
float_bin_vector.push_back(floats.begin());
|
||||
float_bin_vector.push_back(float_bin_vector[0] + bin_sizes[0]);
|
||||
float_bin_vector.push_back(float_bin_vector[1] + bin_sizes[1]);
|
||||
vector<float>::iterator next_float_bin_start = float_bin_vector[0];
|
||||
vector<float>::iterator *float_bins = &float_bin_vector[0];
|
||||
float_swap_loop(float_bins, next_float_bin_start, 0, bin_sizes,
|
||||
float_log_divisor, float_div_min);
|
||||
for (unsigned i = 0; i < floats.size(); ++i) {
|
||||
BOOST_CHECK(floats[i] == 4.0f + i);
|
||||
}
|
||||
BOOST_CHECK(next_float_bin_start == floats.begin() + bin_sizes[0]);
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
roughlog2_test();
|
||||
get_min_count_test<int_log_mean_bin_size, int_log_min_split_count,
|
||||
int_log_finishing_count>();
|
||||
get_min_count_test<float_log_mean_bin_size, float_log_min_split_count,
|
||||
float_log_finishing_count>();
|
||||
get_log_divisor_test();
|
||||
is_sorted_or_find_extremes_test();
|
||||
size_bins_test();
|
||||
swap_loop_test();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+162
-162
@@ -1,162 +1,162 @@
|
||||
// Boost Sort library string_sort_test.cpp file ----------------------------//
|
||||
|
||||
// Copyright Steven Ross 2009. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/detail/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
using boost::sort::spreadsort::detail::offset_less_than;
|
||||
using boost::sort::spreadsort::detail::offset_greater_than;
|
||||
using boost::sort::spreadsort::detail::update_offset;
|
||||
|
||||
struct bracket {
|
||||
unsigned char operator()(const string &x, size_t offset) const {
|
||||
return x[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct wbracket {
|
||||
wchar_t operator()(const wstring &x, size_t offset) const {
|
||||
return x[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct get_size {
|
||||
size_t operator()(const string &x) const{ return x.size(); }
|
||||
};
|
||||
|
||||
struct wget_size {
|
||||
size_t operator()(const wstring &x) const{ return x.size(); }
|
||||
};
|
||||
|
||||
static const unsigned input_count = 100000;
|
||||
|
||||
// Test that update_offset finds the first character with a difference.
|
||||
void update_offset_test() {
|
||||
vector<string> input;
|
||||
input.push_back("test1");
|
||||
input.push_back("test2");
|
||||
size_t char_offset = 1;
|
||||
update_offset<vector<string>::iterator, unsigned char>(input.begin(),
|
||||
input.end(),
|
||||
char_offset);
|
||||
BOOST_CHECK(char_offset == 4);
|
||||
|
||||
// Functor version
|
||||
char_offset = 1;
|
||||
update_offset(input.begin(), input.end(), char_offset, bracket(), get_size());
|
||||
BOOST_CHECK(char_offset == 4);
|
||||
}
|
||||
|
||||
// Test that offset comparison operators only look after the offset.
|
||||
void offset_comparison_test() {
|
||||
string input1 = "ab";
|
||||
string input2 = "ba";
|
||||
string input3 = "aba";
|
||||
offset_less_than<string, unsigned char> less_than(0);
|
||||
offset_greater_than<string, unsigned char> greater_than(0);
|
||||
BOOST_CHECK(less_than(input1, input2));
|
||||
BOOST_CHECK(less_than(input1, input3));
|
||||
BOOST_CHECK(!less_than(input2, input1));
|
||||
BOOST_CHECK(!less_than(input1, input1));
|
||||
BOOST_CHECK(!greater_than(input1, input2));
|
||||
BOOST_CHECK(!greater_than(input1, input3));
|
||||
BOOST_CHECK(greater_than(input2, input1));
|
||||
BOOST_CHECK(!greater_than(input1, input1));
|
||||
|
||||
// Offset comparisons only check after the specified offset.
|
||||
offset_less_than<string, unsigned char> offset_less(1);
|
||||
offset_greater_than<string, unsigned char> offset_greater(1);
|
||||
BOOST_CHECK(!offset_less(input1, input2));
|
||||
BOOST_CHECK(offset_less(input1, input3));
|
||||
BOOST_CHECK(offset_less(input2, input1));
|
||||
BOOST_CHECK(!offset_less(input1, input1));
|
||||
BOOST_CHECK(offset_greater(input1, input2));
|
||||
BOOST_CHECK(!offset_greater(input1, input3));
|
||||
BOOST_CHECK(!offset_greater(input2, input1));
|
||||
BOOST_CHECK(!offset_greater(input1, input1));
|
||||
}
|
||||
|
||||
void string_test()
|
||||
{
|
||||
// Prepare inputs
|
||||
vector<string> base_vec;
|
||||
const unsigned max_length = 32;
|
||||
srand(1);
|
||||
//Generating semirandom numbers
|
||||
for (unsigned u = 0; u < input_count; ++u) {
|
||||
unsigned length = rand() % max_length;
|
||||
string result;
|
||||
for (unsigned v = 0; v < length; ++v) {
|
||||
result.push_back(rand() % 256);
|
||||
}
|
||||
base_vec.push_back(result);
|
||||
}
|
||||
vector<string> sorted_vec = base_vec;
|
||||
vector<string> test_vec = base_vec;
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end());
|
||||
//Testing basic call
|
||||
string_sort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Testing boost::sort::spreadsort wrapper
|
||||
test_vec = base_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Character functors
|
||||
test_vec = base_vec;
|
||||
string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//All functors
|
||||
test_vec = base_vec;
|
||||
string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size(),
|
||||
less<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end(), greater<string>());
|
||||
reverse_string_sort(test_vec.begin(), test_vec.end(), greater<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order with functors
|
||||
test_vec = base_vec;
|
||||
reverse_string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size(),
|
||||
greater<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
}
|
||||
|
||||
// Verify that 0, 1, and input_count empty strings all sort correctly.
|
||||
void corner_test() {
|
||||
vector<string> test_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
test_vec.resize(1);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec[0].empty());
|
||||
test_vec.resize(input_count);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec.size() == input_count);
|
||||
for (unsigned i = 0; i < test_vec.size(); ++i) {
|
||||
BOOST_CHECK(test_vec[i].empty());
|
||||
}
|
||||
}
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
update_offset_test();
|
||||
offset_comparison_test();
|
||||
string_test();
|
||||
corner_test();
|
||||
return 0;
|
||||
}
|
||||
// Boost Sort library string_sort_test.cpp file ----------------------------//
|
||||
|
||||
// Copyright Steven Ross 2009. Use, modification and
|
||||
// distribution is subject to the Boost Software License, Version
|
||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// See http://www.boost.org/libs/sort for library home page.
|
||||
|
||||
#include <boost/sort/spreadsort/detail/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/string_sort.hpp>
|
||||
#include <boost/sort/spreadsort/spreadsort.hpp>
|
||||
// Include unit test framework
|
||||
#include <boost/test/included/test_exec_monitor.hpp>
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::sort::spreadsort;
|
||||
using boost::sort::spreadsort::detail::offset_less_than;
|
||||
using boost::sort::spreadsort::detail::offset_greater_than;
|
||||
using boost::sort::spreadsort::detail::update_offset;
|
||||
|
||||
struct bracket {
|
||||
unsigned char operator()(const string &x, size_t offset) const {
|
||||
return x[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct wbracket {
|
||||
wchar_t operator()(const wstring &x, size_t offset) const {
|
||||
return x[offset];
|
||||
}
|
||||
};
|
||||
|
||||
struct get_size {
|
||||
size_t operator()(const string &x) const{ return x.size(); }
|
||||
};
|
||||
|
||||
struct wget_size {
|
||||
size_t operator()(const wstring &x) const{ return x.size(); }
|
||||
};
|
||||
|
||||
static const unsigned input_count = 100000;
|
||||
|
||||
// Test that update_offset finds the first character with a difference.
|
||||
void update_offset_test() {
|
||||
vector<string> input;
|
||||
input.push_back("test1");
|
||||
input.push_back("test2");
|
||||
size_t char_offset = 1;
|
||||
update_offset<vector<string>::iterator, unsigned char>(input.begin(),
|
||||
input.end(),
|
||||
char_offset);
|
||||
BOOST_CHECK(char_offset == 4);
|
||||
|
||||
// Functor version
|
||||
char_offset = 1;
|
||||
update_offset(input.begin(), input.end(), char_offset, bracket(), get_size());
|
||||
BOOST_CHECK(char_offset == 4);
|
||||
}
|
||||
|
||||
// Test that offset comparison operators only look after the offset.
|
||||
void offset_comparison_test() {
|
||||
string input1 = "ab";
|
||||
string input2 = "ba";
|
||||
string input3 = "aba";
|
||||
offset_less_than<string, unsigned char> less_than(0);
|
||||
offset_greater_than<string, unsigned char> greater_than(0);
|
||||
BOOST_CHECK(less_than(input1, input2));
|
||||
BOOST_CHECK(less_than(input1, input3));
|
||||
BOOST_CHECK(!less_than(input2, input1));
|
||||
BOOST_CHECK(!less_than(input1, input1));
|
||||
BOOST_CHECK(!greater_than(input1, input2));
|
||||
BOOST_CHECK(!greater_than(input1, input3));
|
||||
BOOST_CHECK(greater_than(input2, input1));
|
||||
BOOST_CHECK(!greater_than(input1, input1));
|
||||
|
||||
// Offset comparisons only check after the specified offset.
|
||||
offset_less_than<string, unsigned char> offset_less(1);
|
||||
offset_greater_than<string, unsigned char> offset_greater(1);
|
||||
BOOST_CHECK(!offset_less(input1, input2));
|
||||
BOOST_CHECK(offset_less(input1, input3));
|
||||
BOOST_CHECK(offset_less(input2, input1));
|
||||
BOOST_CHECK(!offset_less(input1, input1));
|
||||
BOOST_CHECK(offset_greater(input1, input2));
|
||||
BOOST_CHECK(!offset_greater(input1, input3));
|
||||
BOOST_CHECK(!offset_greater(input2, input1));
|
||||
BOOST_CHECK(!offset_greater(input1, input1));
|
||||
}
|
||||
|
||||
void string_test()
|
||||
{
|
||||
// Prepare inputs
|
||||
vector<string> base_vec;
|
||||
const unsigned max_length = 32;
|
||||
srand(1);
|
||||
//Generating semirandom numbers
|
||||
for (unsigned u = 0; u < input_count; ++u) {
|
||||
unsigned length = rand() % max_length;
|
||||
string result;
|
||||
for (unsigned v = 0; v < length; ++v) {
|
||||
result.push_back(rand() % 256);
|
||||
}
|
||||
base_vec.push_back(result);
|
||||
}
|
||||
vector<string> sorted_vec = base_vec;
|
||||
vector<string> test_vec = base_vec;
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end());
|
||||
//Testing basic call
|
||||
string_sort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Testing boost::sort::spreadsort wrapper
|
||||
test_vec = base_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//Character functors
|
||||
test_vec = base_vec;
|
||||
string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//All functors
|
||||
test_vec = base_vec;
|
||||
string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size(),
|
||||
less<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order
|
||||
std::sort(sorted_vec.begin(), sorted_vec.end(), greater<string>());
|
||||
reverse_string_sort(test_vec.begin(), test_vec.end(), greater<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
//reverse order with functors
|
||||
test_vec = base_vec;
|
||||
reverse_string_sort(test_vec.begin(), test_vec.end(), bracket(), get_size(),
|
||||
greater<string>());
|
||||
BOOST_CHECK(test_vec == sorted_vec);
|
||||
}
|
||||
|
||||
// Verify that 0, 1, and input_count empty strings all sort correctly.
|
||||
void corner_test() {
|
||||
vector<string> test_vec;
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
test_vec.resize(1);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec[0].empty());
|
||||
test_vec.resize(input_count);
|
||||
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
|
||||
BOOST_CHECK(test_vec.size() == input_count);
|
||||
for (unsigned i = 0; i < test_vec.size(); ++i) {
|
||||
BOOST_CHECK(test_vec[i].empty());
|
||||
}
|
||||
}
|
||||
|
||||
// test main
|
||||
int test_main( int, char*[] )
|
||||
{
|
||||
update_offset_test();
|
||||
offset_comparison_test();
|
||||
string_test();
|
||||
corner_test();
|
||||
return 0;
|
||||
}
|
||||
|
||||
+37
-37
@@ -1,37 +1,37 @@
|
||||
|
||||
Performing configuration checks
|
||||
|
||||
- symlinks supported : yes (cached)
|
||||
...patience...
|
||||
...patience...
|
||||
...found 2544 targets...
|
||||
...updating 20 targets...
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort_test.obj
|
||||
integer_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort_test.obj
|
||||
float_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort_test.obj
|
||||
string_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail_test.obj
|
||||
sort_detail_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.test
|
||||
...updated 20 targets...
|
||||
|
||||
Performing configuration checks
|
||||
|
||||
- symlinks supported : yes (cached)
|
||||
...patience...
|
||||
...patience...
|
||||
...found 2544 targets...
|
||||
...updating 20 targets...
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort_test.obj
|
||||
integer_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort_test.obj
|
||||
float_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort_test.obj
|
||||
string_sort_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.test
|
||||
compile-c-c++ ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail_test.obj
|
||||
sort_detail_test.cpp
|
||||
msvc.link ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe
|
||||
msvc.manifest ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe
|
||||
testing.capture-output ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.run
|
||||
1 file(s) copied.
|
||||
**passed** ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.test
|
||||
...updated 20 targets...
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user