Skip to content

Commit

Permalink
Fixes in sorting descriptions (GH-18317)
Browse files Browse the repository at this point in the history
Improvements in listsort.txt and a comment in sortperf.py.

Automerge-Triggered-By: @csabella
(cherry picked from commit 24e5ad4)

Co-authored-by: Stefan Pochmann <stefan.pochmann@gmail.com>
  • Loading branch information
miss-islington and pochmann committed Feb 4, 2020
1 parent 4c71c83 commit fda6593
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Lib/test/sortperf.py
Expand Up @@ -134,7 +134,7 @@ def tabulate(r):
L = list(range(half - 1, -1, -1))
L.extend(range(half))
# Force to float, so that the timings are comparable. This is
# significantly faster if we leave tham as ints.
# significantly faster if we leave them as ints.
L = list(map(float, L))
doit(L) # !sort
print()
Expand Down
16 changes: 8 additions & 8 deletions Objects/listsort.txt
Expand Up @@ -319,13 +319,13 @@ So merging is always done on two consecutive runs at a time, and in-place,
although this may require some temp memory (more on that later).

When a run is identified, its base address and length are pushed on a stack
in the MergeState struct. merge_collapse() is then called to see whether it
should merge it with preceding run(s). We would like to delay merging as
long as possible in order to exploit patterns that may come up later, but we
like even more to do merging as soon as possible to exploit that the run just
found is still high in the memory hierarchy. We also can't delay merging
"too long" because it consumes memory to remember the runs that are still
unmerged, and the stack has a fixed size.
in the MergeState struct. merge_collapse() is then called to potentially
merge runs on that stack. We would like to delay merging as long as possible
in order to exploit patterns that may come up later, but we like even more to
do merging as soon as possible to exploit that the run just found is still
high in the memory hierarchy. We also can't delay merging "too long" because
it consumes memory to remember the runs that are still unmerged, and the
stack has a fixed size.

What turned out to be a good compromise maintains two invariants on the
stack entries, where A, B and C are the lengths of the three righmost not-yet
Expand Down Expand Up @@ -739,7 +739,7 @@ slice (leaving off both endpoints) (2**(k-1)-1)+1 through (2**k-1)-1
inclusive = 2**(k-1) through (2**k-1)-1 inclusive, which has
(2**k-1)-1 - 2**(k-1) + 1 =
2**k-1 - 2**(k-1) =
2*2**k-1 - 2**(k-1) =
2*2**(k-1)-1 - 2**(k-1) =
(2-1)*2**(k-1) - 1 =
2**(k-1) - 1
elements.
Expand Down

0 comments on commit fda6593

Please sign in to comment.