doc corrections

This commit is contained in:
fjtapia
2017-11-21 18:37:15 +01:00
parent 896098438d
commit 50d2579d68
101 changed files with 16837 additions and 16816 deletions
+41 -41
View File
@@ -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 ;
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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&lt; std::numeric_limits&lt; typename std::iterator_traits&lt; RandomAccessIter &gt;::value_type &gt;::is_integer, void &gt;::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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+316 -316
View File
@@ -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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>
+318 -318
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+11 -11
View File
@@ -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>
+283 -283
View File
@@ -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>
+160 -160
View File
@@ -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>
+49 -49
View File
@@ -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;}
+35 -35
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+358 -358
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+316 -316
View File
@@ -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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>
+318 -318
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+11 -11
View File
@@ -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>
+283 -283
View File
@@ -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>
+160 -160
View File
@@ -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>
+49 -49
View File
@@ -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;}
+35 -35
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+346 -346
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+314 -314
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+8 -8
View File
@@ -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>
+155 -155
View File
@@ -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>
+49 -49
View File
@@ -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;}
+33 -33
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+358 -358
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+316 -316
View File
@@ -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>&quot;<x:B>Runtime vs. range for 10 million elements and MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>&quot;<x:B>Runtime vs. range for 10 million elements and MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>
+313 -313
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+11 -11
View File
@@ -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>
+283 -283
View File
@@ -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>
+160 -160
View File
@@ -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;}
+35 -35
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+359 -359
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+315 -315
View File
@@ -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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>&quot;<x:B>Runtime vs. range for 10 million elements with MAX_SPLITS 11</x:B>&quot;</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>&quot;<x:B>Range (bits)</x:B>&quot;</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>&quot;<x:B>Runtime (seconds)</x:B>&quot;</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>
+319 -319
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on 32-bit Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+283 -283
View File
@@ -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>
+160 -160
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Ranges</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="chart002.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">RangeData</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet002.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+345 -345
View File
@@ -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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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\">&nbsp;<td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>&#171;</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>&lt</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>&gt</a></td>"+
"<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>&#187;</a></td>"+
"<td style=\"font:1pt\">&nbsp;<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\">&nbsp;</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>&nbsp;"+c_rgszSh[i]+"&nbsp;</a></td>";
}
szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab>&nbsp;</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>
+320 -320
View File
@@ -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>&quot;<x:B>Runtimes vs. Size on Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>&quot;<x:B>Runtimes vs. Size on Random Data</x:B>&quot;</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>&quot;<x:B>Element Count</x:B>&quot;</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>&quot;<x:B>Runtime (s)</x:B>&quot;</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>
+145 -145
View File
@@ -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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</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>&nbsp;<a href="chart001.htm" target="frSheet"><font face="Arial" color="#000000">Runtimes</font></a>&nbsp;</small></small></b></td>
<td bgcolor="#FFFFFF" nowrap><b><small><small>&nbsp;<a href="sheet001.htm" target="frSheet"><font face="Arial" color="#000000">Runtime Data</font></a>&nbsp;</small></small></b></td>
</tr>
</table>
</body>
</html>
+226 -226
View File
@@ -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[]'''&#x192;'''] [/ ƒ Latin small f with hook = function = florin]
[/ Capital Greek start with capital letter, lower case all small.]
[template Alpha[]'''&#x391;'''] [/ ? Greek capital letter alpha]
[template Beta[]'''&#x392;'''] [/ ? Greek capital letter beta]
[template Gamma[]'''&#x393;'''] [/ G Greek capital letter gamma]
[template Delta[]'''&#x394;'''] [/ ? Greek capital letter delta]
[template Epsilon[]'''&#x395;'''] [/ ? Greek capital letter epsilon]
[template Zeta[]'''&#x396;'''] [/ ? Greek capital letter zeta]
[template Eta[]'''&#x397;'''] [/ ? Greek capital letter eta]
[template Theta[]'''&#x398;'''] [/ T Greek capital letter theta]
[template Iota[]'''&#x399;'''] [/ ? Greek capital letter iota]
[template Kappa[]'''&#x39A;'''] [/ ? Greek capital letter kappa]
[template Lambda[]'''&#x39B;'''] [/ ? Greek capital letter lambda]
[template Mu[]'''&#x39C;'''] [/ ? Greek capital letter mu]
[template Nu[]'''&#x39D;'''] [/ ? Greek capital letter nu]
[template Xi[]'''&#x39E;'''] [/ ? Greek capital letter xi]
[template Omicron[]'''&#x39F;'''] [/ ? Greek capital letter omicron]
[template Pi[]'''&#x3A0;'''] [/ ? Greek capital letter pi]
[template Rho[]'''&#x3A1;'''] [/ ? Greek capital letter rho]
[template Sigma[]'''&#x3A3;'''] [/ S Greek capital letter sigma]
[template Tau[]'''&#x3A4;'''] [/ ? Greek capital letter tau]
[template Upsilon[]'''&#x3A5;'''] [/ ? Greek capital letter upsilon]
[template Phi[]'''&#x3A6;'''] [/ F Greek capital letter phi]
[template Chi[]'''&#x3A7;'''] [/ ? Greek capital letter chi]
[template Psi[]'''&#x3A8;'''] [/ ? Greek capital letter psi]
[template Omega[]'''&#x3A9;'''] [/ O Greek capital letter omega]
[template alpha[]'''&#x3B1;'''] [/ a Greek small letter alpha]
[template beta[]'''&#x3B2;'''] [/ ß Greek small letter beta]
[template gamma[]'''&#x3B3;'''] [/ ? Greek small letter gamma]
[template delta[]'''&#x3B4;'''] [/ d Greek small letter delta]
[template epsilon[]'''&#x3B5;'''] [/ e Greek small letter epsilon]
[template zeta[]'''&#x3B6;'''] [/ ? Greek small letter zeta]
[template eta[]'''&#x3B7;'''] [/ ? Greek small letter eta]
[template theta[]'''&#x3B8;'''] [/ ? Greek small letter theta]
[template iota[]'''&#x3B9;'''] [/ ? Greek small letter iota]
[template kappa[]'''&#x3BA;'''] [/ ? Greek small letter kappa]
[template lambda[]'''&#x3BB;'''] [/ ? Greek small letter lambda]
[template mu[]'''&#x3BC;'''] [/ µ Greek small letter mu]
[template nu[]'''&#x3BD;'''] [/ ? Greek small letter nu]
[template xi[]'''&#x3BE;'''] [/ ? Greek small letter xi]
[template omicron[]'''&#x3BF;'''] [/ ? Greek small letter omicron]
[template pi[]'''&#x3C0;'''] [/ p Greek small letter pi]
[template rho[]'''&#x3C1;'''] [/ ? Greek small letter rho]
[template sigmaf[]'''&#x3C2;'''] [/ ? Greek small letter final sigma]
[template sigma[]'''&#x3C3;'''] [/ s Greek small letter sigma]
[template tau[]'''&#x3C4;'''] [/ t Greek small letter tau]
[template upsilon[]'''&#x3C5;'''] [/ ? Greek small letter upsilon]
[template phi[]'''&#x3C6;'''] [/ f Greek small letter phi]
[template chi[]'''&#x3C7;'''] [/ ? Greek small letter chi]
[template psi[]'''&#x3C8;'''] [/ ? Greek small letter psi]
[template omega[]'''&#x3C9;'''] [/ ? Greek small letter omega]
[template thetasym[]'''&#x3D1;'''] [/ ? Greek small letter theta symbol]
[template upsih[]'''&#x3D2;'''] [/ ? Greek upsilon with hook symbol]
[template piv[]'''&#x3D6;'''] [/ ? Greek pi symbol]
[template bull[]'''&#x2022;'''] [/ • bullet = black small circle]
[template hellip[]'''&#x2026;'''] [/ … horizontal ellipsis = three dot leader]
[template prime[]'''&#x2032;'''] [/ ' prime = minutes = feet]
[template Prime[]'''&#x2033;'''] [/ ? double prime = seconds = inches]
[template oline[]'''&#x203E;'''] [/ ? overline = spacing overscore]
[template frasl[]'''&#x2044;'''] [/ / fraction slash]
[template weierp[]'''&#x2118;'''] [/ P script capital P = power set = Weierstrass p]
[template image[]'''&#x2111;'''] [/ I blackletter capital I = imaginary part]
[template real[]'''&#x211C;'''] [/ R blackletter capital R = real part math symbol]
[template bigo[]'''&#x1D476;'''] [/ O blackletter capital O = big O symbol]
[template negative[]'''&#x2115;'''] [/ N blackletter capital N = Negative number math symbol]
[template trade[]'''&#x2122;'''] [/ ™ trade mark sign]
[template alefsym[]'''&#x2135;'''] [/ ? alef symbol = first transfinite cardinal]
[template larr[]'''&#x2190;'''] [/ ? leftwards arrow]
[template uarr[]'''&#x2191;'''] [/ ? upwards arrow]
[template rarr[]'''&#x2192;'''] [/ ? rightwards arrow]
[template darr[]'''&#x2193;'''] [/ ? downwards arrow]
[template harr[]'''&#x2194;'''] [/ ? left right arrow]
[template crarr[]'''&#x21B5;'''] [/ ? downwards arrow with corner leftwards = CR]
[template lArr[]'''&#x21D0;'''] [/ ? leftwards double arrow]
[template uArr[]'''&#x21D1;'''] [/ ? upwards double arrow]
[template rArr[]'''&#x21D2;'''] [/ ? rightwards double arrow]
[template dArr[]'''&#x21D3;'''] [/ ? downwards double arrow]
[template hArr[]'''&#x21D4;'''] [/ ? left right double arrow]
[template forall[]'''&#x2200;'''] [/ ? for all]
[template part[]'''&#x2202;'''] [/ ? partial differential]
[template exist[]'''&#x2203;'''] [/ ? there exists]
[template empty[]'''&#x2205;'''] [/ Ø empty set = null set = diameter]
[template nabla[]'''&#x2207;'''] [/ ? nabla = backward difference]
[template isin[]'''&#x2208;'''] [/ ? element of]
[template notin[]'''&#x2209;'''] [/ ? not an element of]
[template ni[]'''&#x220B;'''] [/ ? contains as member]
[template prod[]'''&#x220F;'''] [/ ? n-ary product = product sign]
[template sum[]'''&#x2211;'''] [/ ? n-ary sumation]
[template minus[]'''&#x2212;'''] [/ - minus sign]
[template lowast[]'''&#x2217;'''] [/ * asterisk operator]
[template radic[]'''&#x221A;'''] [/ v square root = radical sign]
[template prop[]'''&#x221D;'''] [/ ? proportional to]
[template infin[]'''&#x221E;'''] [/ 8 infinity]
[template ang[]'''&#x2220;'''] [/ ? angle]
[template and[]'''&#x2227;'''] [/ ? logical and = wedge]
[template or[]'''&#x2228;'''] [/ ? logical or = vee]
[template cap[]'''&#x2229;'''] [/ n intersection = cap]
[template cup[]'''&#x222A;'''] [/ ? union = cup]
[template int[]'''&#x222B;'''] [/ ? integral]
[template there4[]'''&#x2234;'''] [/ ? therefore]
[template sim[]'''&#x223C;'''] [/ ~ tilde operator = varies with = similar to]
[template cong[]'''&#x2245;'''] [/ ? approximately equal to]
[template approx[]'''&#x2248;'''] [/ ? ~~ very approximately equal to]
[template asymp[]'''&#x2248;'''] [/ ˜ almost equal to = asymptotic to]
[template ne[]'''&#x2260;'''] [/ ? not equal to]
[template equiv[]'''&#x2261;'''] [/ = identical to]
[template le[]'''&#x2264;'''] [/ = less-than or equal to]
[template ge[]'''&#x2265;'''] [/ = greater-than or equal to]
[template subset[]'''&#x2282;'''] [/ ? subset of]
[template superset[]'''&#x2283;'''] [/ ? superset of]
[template nsubset[]'''&#x2284;'''] [/ ? not a subset of]
[template sube[]'''&#x2286;'''] [/ ? subset of or equal to]
[template supe[]'''&#x2287;'''] [/ ? superset of or equal to]
[template oplus[]'''&#x2295;'''] [/ ? circled plus = direct sum]
[template otimes[]'''&#x2297;'''] [/ ? circled times = vector product]
[template perp[]'''&#x22A5;'''] [/ ? up tack = orthogonal to = perpendicular]
[template sdot[]'''&#x22C5;'''] [/ · dot operator]
[template lceil[]'''&#x2308;'''] [/ ? left ceiling = APL upstile]
[template rceil[]'''&#x2309;'''] [/ ? right ceiling]
[template lfloor[]'''&#x230A;'''] [/ ? left floor = APL downstile]
[template rfloor[]'''&#x230B;'''] [/ ? right floor]
[template lang[]'''&#x2329;'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)]
[template rang[]'''&#x232A;'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)]
[template loz[]'''&#x25CA;'''] [/ ? lozenge]
[template spades[]'''&#x2660;'''] [/ ? black spade suit]
[template clubs[]'''&#x2663;'''] [/ ? black club suit = shamrock]
[template hearts[]'''&#x2665;'''] [/ ? black heart suit = valentine]
[template diams[]'''&#x2666;'''] [/ ? black diamond suit]
[template euro[]'''&#x20AC;'''] [/ ? Euro currency symbol]
[template lchev[]'''&#x27E8;'''] [/ ? left chevron]
[template rchev[]'''&#x27E9;'''] [/ right chevron]
[template rflat[]'''&#x27EE;'''] [/ right flat bracket Misc Math Symbol A]
[template lflat[]'''&#x27EE;'''] [/ left flat bracket]
[/ U2000.pdf punctuation]
[template endash[]'''&#x2013;'''] [/ em width dash]
[template emdash[]'''&#x2014;'''] [/ en width dash]
[template hbar[]'''&#x2015;'''] [/ ? horizontal bar - introducing quoted text]
[template vert2bar[]'''&#x2016;'''] [/ ? double vertical bar]
[template line2[]'''&#x2016;'''] [/ ? double low line bar]
[template dagger[]'''&#x2020;'''] [/ ? dagger]
[template dagger2[]'''&#x2021;'''] [/ ? double dagger]
[template dot[]'''&#x2024;'''] [/ dot leader]
[template dot2[]'''&#x2025;'''] [/ ? dots leader]
[template ellipsis[]'''&#x2026;'''] [/ horizontal ellipsis]
[template sect[]'''&#x00A7;'''] [/ ? section or paragraph sign]
[template dotover[]'''&#x0307;'''] [/ dot over symbol]
[template recur[]'''&#x200A;&#x0307;'''] [/ 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[] '''&#x2000;'''] [/ en quad space]
[template emquad[] '''&#x2001;'''] [/ em quad space]
[template enspace[] '''&#x2002;'''] [/ em half en space]
[template emspace[] '''&#x2003;'''] [/ em space type size in points]
[template thickspace[] '''&#x2004;'''] [/ 3 per em space]
[template midspace[] '''&#x2005;'''] [/ 4 per em space]
[template sixemspace[] '''&#x2006;'''] [/ 6 em space]
[template figspace[] '''&#x2007;'''] [/ space = width fixed font digit]
[template punctspace[] '''&#x2008;'''] [/ space = width punctuation]
[template thin[] '''&#x2009;'''] [/ thin space ]
[template hair[] '''&#x200A;'''] [/ hair space]
[template nbsp[] '''&#x00A0;'''] [/ non-breaking space]
[template space[] '''&#x00A0;'''] [/ plain non-breaking space]
[template nospace[] '''&#x200B;'''] [/ zero width space]
[template wordjoin[] '''&#x2060;'''] [/ word joiner - no line break either side]
[template narrownbsp[] '''&#x202F;'''] [/ narrow non-breaking space]
[template hyphen[] '''&#x2010;'''] [/ soft hyphen]
[template nbhyphen[] '''&#x2011;'''] [/ non-breaking hyphen]
[template plusminus[]'''&#x00B1;'''] [/ ? plus or minus sign]
[template sqrt[]'''&#x221A;'''] [/ ? square root sqrt symbol]
[/template pow2[]'''&#x2073;'''] [/ 2073 is NOT superscript 2 and 3 characters]
[template pow2[]'''&#x00B2;'''] [/ superscript 2 character]
[template pow3[]'''&#x00B3;'''] [/ superscript 3 character]
[/ Unicode 2070 to 209F has super and subscript digits and characters, unicode.org/charts/PDF/U2070.pdf]
[template pow4[]'''&#x2074;'''] [/ superscript 4 character]
[template pown[]'''&#x207F;'''] [/ superscript n character]
[template frac12[]'''&#x00BD;'''] [/ fraction half]
[template frac13[]'''&#x2153;'''] [/ fraction third]
[template frac14[]'''&#x00BC;'''] [/ fraction quarter]
[template frac34[]'''&#x00BE;'''] [/ fraction three quarter]
[template frac23[]'''&#x2154;'''] [/ fraction two third]
[template sup1[]'''&#xB9;'''] [/ superscript one = superscript digit one ]
[template sup2[]'''&#xB2;'''] [/ superscript two = superscript digit two = squared ]
[template supminus[]'''&#x207B;'''] [/ superscript minus]
[template supplus[]'''&#x207A;'''] [/ superscript plus]
[template cubed[]'''&#xB3;'''] [/ superscript three = superscript digit three = cubed ]
[template macron[]'''&#xAF;'''] [/ macron = spacing macron = overline = APL overbar ]
[template deg[]'''&#xB0;'''] [/ degree sign ]
[template plusmn[]'''&#xB1;'''] [/ plus-minus sign = plus-or-minus sign ]
[template micro[]'''&#xB5;'''] [/ micro sign ]
[template cedil[]'''&#xB8;'''] [/ cedilla = spacing cedilla ]
[template ordm[]'''&#xBA;'''] [/ masculine ordinal indicator ]
[template ordf[]'''&#xAA;'''] [/ feminine ordinal indicator ]
[template laquo[]'''&#xAB;'''] [/ left-pointing double angle quotation mark = left pointing guillemet ]
[template raquo[]'''&#xBB;'''] [/ 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[]'''&#x192;'''] [/ ƒ Latin small f with hook = function = florin]
[/ Capital Greek start with capital letter, lower case all small.]
[template Alpha[]'''&#x391;'''] [/ ? Greek capital letter alpha]
[template Beta[]'''&#x392;'''] [/ ? Greek capital letter beta]
[template Gamma[]'''&#x393;'''] [/ G Greek capital letter gamma]
[template Delta[]'''&#x394;'''] [/ ? Greek capital letter delta]
[template Epsilon[]'''&#x395;'''] [/ ? Greek capital letter epsilon]
[template Zeta[]'''&#x396;'''] [/ ? Greek capital letter zeta]
[template Eta[]'''&#x397;'''] [/ ? Greek capital letter eta]
[template Theta[]'''&#x398;'''] [/ T Greek capital letter theta]
[template Iota[]'''&#x399;'''] [/ ? Greek capital letter iota]
[template Kappa[]'''&#x39A;'''] [/ ? Greek capital letter kappa]
[template Lambda[]'''&#x39B;'''] [/ ? Greek capital letter lambda]
[template Mu[]'''&#x39C;'''] [/ ? Greek capital letter mu]
[template Nu[]'''&#x39D;'''] [/ ? Greek capital letter nu]
[template Xi[]'''&#x39E;'''] [/ ? Greek capital letter xi]
[template Omicron[]'''&#x39F;'''] [/ ? Greek capital letter omicron]
[template Pi[]'''&#x3A0;'''] [/ ? Greek capital letter pi]
[template Rho[]'''&#x3A1;'''] [/ ? Greek capital letter rho]
[template Sigma[]'''&#x3A3;'''] [/ S Greek capital letter sigma]
[template Tau[]'''&#x3A4;'''] [/ ? Greek capital letter tau]
[template Upsilon[]'''&#x3A5;'''] [/ ? Greek capital letter upsilon]
[template Phi[]'''&#x3A6;'''] [/ F Greek capital letter phi]
[template Chi[]'''&#x3A7;'''] [/ ? Greek capital letter chi]
[template Psi[]'''&#x3A8;'''] [/ ? Greek capital letter psi]
[template Omega[]'''&#x3A9;'''] [/ O Greek capital letter omega]
[template alpha[]'''&#x3B1;'''] [/ a Greek small letter alpha]
[template beta[]'''&#x3B2;'''] [/ ß Greek small letter beta]
[template gamma[]'''&#x3B3;'''] [/ ? Greek small letter gamma]
[template delta[]'''&#x3B4;'''] [/ d Greek small letter delta]
[template epsilon[]'''&#x3B5;'''] [/ e Greek small letter epsilon]
[template zeta[]'''&#x3B6;'''] [/ ? Greek small letter zeta]
[template eta[]'''&#x3B7;'''] [/ ? Greek small letter eta]
[template theta[]'''&#x3B8;'''] [/ ? Greek small letter theta]
[template iota[]'''&#x3B9;'''] [/ ? Greek small letter iota]
[template kappa[]'''&#x3BA;'''] [/ ? Greek small letter kappa]
[template lambda[]'''&#x3BB;'''] [/ ? Greek small letter lambda]
[template mu[]'''&#x3BC;'''] [/ µ Greek small letter mu]
[template nu[]'''&#x3BD;'''] [/ ? Greek small letter nu]
[template xi[]'''&#x3BE;'''] [/ ? Greek small letter xi]
[template omicron[]'''&#x3BF;'''] [/ ? Greek small letter omicron]
[template pi[]'''&#x3C0;'''] [/ p Greek small letter pi]
[template rho[]'''&#x3C1;'''] [/ ? Greek small letter rho]
[template sigmaf[]'''&#x3C2;'''] [/ ? Greek small letter final sigma]
[template sigma[]'''&#x3C3;'''] [/ s Greek small letter sigma]
[template tau[]'''&#x3C4;'''] [/ t Greek small letter tau]
[template upsilon[]'''&#x3C5;'''] [/ ? Greek small letter upsilon]
[template phi[]'''&#x3C6;'''] [/ f Greek small letter phi]
[template chi[]'''&#x3C7;'''] [/ ? Greek small letter chi]
[template psi[]'''&#x3C8;'''] [/ ? Greek small letter psi]
[template omega[]'''&#x3C9;'''] [/ ? Greek small letter omega]
[template thetasym[]'''&#x3D1;'''] [/ ? Greek small letter theta symbol]
[template upsih[]'''&#x3D2;'''] [/ ? Greek upsilon with hook symbol]
[template piv[]'''&#x3D6;'''] [/ ? Greek pi symbol]
[template bull[]'''&#x2022;'''] [/ • bullet = black small circle]
[template hellip[]'''&#x2026;'''] [/ … horizontal ellipsis = three dot leader]
[template prime[]'''&#x2032;'''] [/ ' prime = minutes = feet]
[template Prime[]'''&#x2033;'''] [/ ? double prime = seconds = inches]
[template oline[]'''&#x203E;'''] [/ ? overline = spacing overscore]
[template frasl[]'''&#x2044;'''] [/ / fraction slash]
[template weierp[]'''&#x2118;'''] [/ P script capital P = power set = Weierstrass p]
[template image[]'''&#x2111;'''] [/ I blackletter capital I = imaginary part]
[template real[]'''&#x211C;'''] [/ R blackletter capital R = real part math symbol]
[template bigo[]'''&#x1D476;'''] [/ O blackletter capital O = big O symbol]
[template negative[]'''&#x2115;'''] [/ N blackletter capital N = Negative number math symbol]
[template trade[]'''&#x2122;'''] [/ ™ trade mark sign]
[template alefsym[]'''&#x2135;'''] [/ ? alef symbol = first transfinite cardinal]
[template larr[]'''&#x2190;'''] [/ ? leftwards arrow]
[template uarr[]'''&#x2191;'''] [/ ? upwards arrow]
[template rarr[]'''&#x2192;'''] [/ ? rightwards arrow]
[template darr[]'''&#x2193;'''] [/ ? downwards arrow]
[template harr[]'''&#x2194;'''] [/ ? left right arrow]
[template crarr[]'''&#x21B5;'''] [/ ? downwards arrow with corner leftwards = CR]
[template lArr[]'''&#x21D0;'''] [/ ? leftwards double arrow]
[template uArr[]'''&#x21D1;'''] [/ ? upwards double arrow]
[template rArr[]'''&#x21D2;'''] [/ ? rightwards double arrow]
[template dArr[]'''&#x21D3;'''] [/ ? downwards double arrow]
[template hArr[]'''&#x21D4;'''] [/ ? left right double arrow]
[template forall[]'''&#x2200;'''] [/ ? for all]
[template part[]'''&#x2202;'''] [/ ? partial differential]
[template exist[]'''&#x2203;'''] [/ ? there exists]
[template empty[]'''&#x2205;'''] [/ Ø empty set = null set = diameter]
[template nabla[]'''&#x2207;'''] [/ ? nabla = backward difference]
[template isin[]'''&#x2208;'''] [/ ? element of]
[template notin[]'''&#x2209;'''] [/ ? not an element of]
[template ni[]'''&#x220B;'''] [/ ? contains as member]
[template prod[]'''&#x220F;'''] [/ ? n-ary product = product sign]
[template sum[]'''&#x2211;'''] [/ ? n-ary sumation]
[template minus[]'''&#x2212;'''] [/ - minus sign]
[template lowast[]'''&#x2217;'''] [/ * asterisk operator]
[template radic[]'''&#x221A;'''] [/ v square root = radical sign]
[template prop[]'''&#x221D;'''] [/ ? proportional to]
[template infin[]'''&#x221E;'''] [/ 8 infinity]
[template ang[]'''&#x2220;'''] [/ ? angle]
[template and[]'''&#x2227;'''] [/ ? logical and = wedge]
[template or[]'''&#x2228;'''] [/ ? logical or = vee]
[template cap[]'''&#x2229;'''] [/ n intersection = cap]
[template cup[]'''&#x222A;'''] [/ ? union = cup]
[template int[]'''&#x222B;'''] [/ ? integral]
[template there4[]'''&#x2234;'''] [/ ? therefore]
[template sim[]'''&#x223C;'''] [/ ~ tilde operator = varies with = similar to]
[template cong[]'''&#x2245;'''] [/ ? approximately equal to]
[template approx[]'''&#x2248;'''] [/ ? ~~ very approximately equal to]
[template asymp[]'''&#x2248;'''] [/ ˜ almost equal to = asymptotic to]
[template ne[]'''&#x2260;'''] [/ ? not equal to]
[template equiv[]'''&#x2261;'''] [/ = identical to]
[template le[]'''&#x2264;'''] [/ = less-than or equal to]
[template ge[]'''&#x2265;'''] [/ = greater-than or equal to]
[template subset[]'''&#x2282;'''] [/ ? subset of]
[template superset[]'''&#x2283;'''] [/ ? superset of]
[template nsubset[]'''&#x2284;'''] [/ ? not a subset of]
[template sube[]'''&#x2286;'''] [/ ? subset of or equal to]
[template supe[]'''&#x2287;'''] [/ ? superset of or equal to]
[template oplus[]'''&#x2295;'''] [/ ? circled plus = direct sum]
[template otimes[]'''&#x2297;'''] [/ ? circled times = vector product]
[template perp[]'''&#x22A5;'''] [/ ? up tack = orthogonal to = perpendicular]
[template sdot[]'''&#x22C5;'''] [/ · dot operator]
[template lceil[]'''&#x2308;'''] [/ ? left ceiling = APL upstile]
[template rceil[]'''&#x2309;'''] [/ ? right ceiling]
[template lfloor[]'''&#x230A;'''] [/ ? left floor = APL downstile]
[template rfloor[]'''&#x230B;'''] [/ ? right floor]
[template lang[]'''&#x2329;'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)]
[template rang[]'''&#x232A;'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)]
[template loz[]'''&#x25CA;'''] [/ ? lozenge]
[template spades[]'''&#x2660;'''] [/ ? black spade suit]
[template clubs[]'''&#x2663;'''] [/ ? black club suit = shamrock]
[template hearts[]'''&#x2665;'''] [/ ? black heart suit = valentine]
[template diams[]'''&#x2666;'''] [/ ? black diamond suit]
[template euro[]'''&#x20AC;'''] [/ ? Euro currency symbol]
[template lchev[]'''&#x27E8;'''] [/ ? left chevron]
[template rchev[]'''&#x27E9;'''] [/ right chevron]
[template rflat[]'''&#x27EE;'''] [/ right flat bracket Misc Math Symbol A]
[template lflat[]'''&#x27EE;'''] [/ left flat bracket]
[/ U2000.pdf punctuation]
[template endash[]'''&#x2013;'''] [/ em width dash]
[template emdash[]'''&#x2014;'''] [/ en width dash]
[template hbar[]'''&#x2015;'''] [/ ? horizontal bar - introducing quoted text]
[template vert2bar[]'''&#x2016;'''] [/ ? double vertical bar]
[template line2[]'''&#x2016;'''] [/ ? double low line bar]
[template dagger[]'''&#x2020;'''] [/ ? dagger]
[template dagger2[]'''&#x2021;'''] [/ ? double dagger]
[template dot[]'''&#x2024;'''] [/ dot leader]
[template dot2[]'''&#x2025;'''] [/ ? dots leader]
[template ellipsis[]'''&#x2026;'''] [/ horizontal ellipsis]
[template sect[]'''&#x00A7;'''] [/ ? section or paragraph sign]
[template dotover[]'''&#x0307;'''] [/ dot over symbol]
[template recur[]'''&#x200A;&#x0307;'''] [/ 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[] '''&#x2000;'''] [/ en quad space]
[template emquad[] '''&#x2001;'''] [/ em quad space]
[template enspace[] '''&#x2002;'''] [/ em half en space]
[template emspace[] '''&#x2003;'''] [/ em space type size in points]
[template thickspace[] '''&#x2004;'''] [/ 3 per em space]
[template midspace[] '''&#x2005;'''] [/ 4 per em space]
[template sixemspace[] '''&#x2006;'''] [/ 6 em space]
[template figspace[] '''&#x2007;'''] [/ space = width fixed font digit]
[template punctspace[] '''&#x2008;'''] [/ space = width punctuation]
[template thin[] '''&#x2009;'''] [/ thin space ]
[template hair[] '''&#x200A;'''] [/ hair space]
[template nbsp[] '''&#x00A0;'''] [/ non-breaking space]
[template space[] '''&#x00A0;'''] [/ plain non-breaking space]
[template nospace[] '''&#x200B;'''] [/ zero width space]
[template wordjoin[] '''&#x2060;'''] [/ word joiner - no line break either side]
[template narrownbsp[] '''&#x202F;'''] [/ narrow non-breaking space]
[template hyphen[] '''&#x2010;'''] [/ soft hyphen]
[template nbhyphen[] '''&#x2011;'''] [/ non-breaking hyphen]
[template plusminus[]'''&#x00B1;'''] [/ ? plus or minus sign]
[template sqrt[]'''&#x221A;'''] [/ ? square root sqrt symbol]
[/template pow2[]'''&#x2073;'''] [/ 2073 is NOT superscript 2 and 3 characters]
[template pow2[]'''&#x00B2;'''] [/ superscript 2 character]
[template pow3[]'''&#x00B3;'''] [/ superscript 3 character]
[/ Unicode 2070 to 209F has super and subscript digits and characters, unicode.org/charts/PDF/U2070.pdf]
[template pow4[]'''&#x2074;'''] [/ superscript 4 character]
[template pown[]'''&#x207F;'''] [/ superscript n character]
[template frac12[]'''&#x00BD;'''] [/ fraction half]
[template frac13[]'''&#x2153;'''] [/ fraction third]
[template frac14[]'''&#x00BC;'''] [/ fraction quarter]
[template frac34[]'''&#x00BE;'''] [/ fraction three quarter]
[template frac23[]'''&#x2154;'''] [/ fraction two third]
[template sup1[]'''&#xB9;'''] [/ superscript one = superscript digit one ]
[template sup2[]'''&#xB2;'''] [/ superscript two = superscript digit two = squared ]
[template supminus[]'''&#x207B;'''] [/ superscript minus]
[template supplus[]'''&#x207A;'''] [/ superscript plus]
[template cubed[]'''&#xB3;'''] [/ superscript three = superscript digit three = cubed ]
[template macron[]'''&#xAF;'''] [/ macron = spacing macron = overline = APL overbar ]
[template deg[]'''&#xB0;'''] [/ degree sign ]
[template plusmn[]'''&#xB1;'''] [/ plus-minus sign = plus-or-minus sign ]
[template micro[]'''&#xB5;'''] [/ micro sign ]
[template cedil[]'''&#xB8;'''] [/ cedilla = spacing cedilla ]
[template ordm[]'''&#xBA;'''] [/ masculine ordinal indicator ]
[template ordf[]'''&#xAA;'''] [/ feminine ordinal indicator ]
[template laquo[]'''&#xAB;'''] [/ left-pointing double angle quotation mark = left pointing guillemet ]
[template raquo[]'''&#xBB;'''] [/ 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
View File
@@ -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]
+11 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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]'''&#x230A;'''[x]'''&#x230B;''']
[template floorlr[x][lfloor][x][rfloor]]
[template ceil[x] '''&#x2308;'''[x]'''&#x2309;''']
[/ 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]'''&#x230A;'''[x]'''&#x230B;''']
[template floorlr[x][lfloor][x][rfloor]]
[template ceil[x] '''&#x2308;'''[x]'''&#x2309;''']
[/ 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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+12 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+112 -112
View File
@@ -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;
}
+98 -98
View File
@@ -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;
}
+98 -98
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+176 -176
View File
@@ -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
+315 -315
View File
@@ -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
+169 -169
View File
@@ -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
View File
@@ -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>
&nbsp;<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>
&nbsp;<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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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