The final optimized version of Dual-Pivot Quicksort (ver.19.1)
Brent Christian
brent.christian at oracle.com
Tue Jul 9 20:15:24 UTC 2019
Hi,
Is the webrev incomplete? It only contains the changes for
DualPivotQuicksort.java, and not for Arrays.java, etc.
Thanks,
-Brent
On 6/18/19 2:37 PM, Vladimir Yaroslavskiy wrote:
> Hi team,
>
> Please review the final optimized version of Dual-Pivot Quicksort (ver.19.1),
> see http://cr.openjdk.java.net/~alanb/8226297/0/webrev
> (link to Jira task https://bugs.openjdk.java.net/browse/JDK-8226297)
>
> The new version was published here more than one year ago (on Jan 19, 2018).
> Since that time Dual-Pivot Quicksort has been significantly improved
> and this work was done in collaboration with Doug Lea and Laurent Bourges.
>
> You can find summary of all changes below.
>
> DualPivotQuicksort.java
> ----------------------------------------------------------------------
> * The 1-st and 5-th candidates are taken as pivots
> instead of 2-nd and 4-th
> * Pivots are chosen with another step
> * Pivot candidates are sorted by combination of
> 5-element network sorting and insertion sort
> * New backwards partitioning was introduced
> * Partitioning is related to the golden ratio
> * Quicksort tuning parameters were updated
> * Thresholds for byte / char / short sorting were updated
> * Additional steps for float / double were fully rewritten
> * Parallel sorting is based on combination of merge sort
> and Dual-Pivot Quicksort
> * Pair insertion sort was optimized and became a part
> of mixed insertion sort
> * Mixed insertion sort was introduced: combination
> of simple insertion sort, pin insertion sort and
> pair insertion sort
> * Simple insertion sort is invoked on tiny array
> * Pin insertion sort is started on small array
> * Pair insertion sort is continued on remain part
> * Merging of runs is invoked on each iteration of Quicksort
> * Merging of runs was fully rewritten
> * Optimal partitioning of merging is used
> * Not more than one copy of part to buffer during merging
> * Merging parameters were updated
> * Initial capacity of runs is based on size
> * Max number of runs is constant
> * Optimized version of heap sort was introduced
> * Heap sort is used as a guard against quadratic time
> (int / long / float / double)
> * Parallel merging of runs was also provided
> * Parallel sorting, heap sort and merging of runs
> are not used in byte / char / short sorting
> * Counting sort for byte / char / short were optimized
> * Counting sort is used as a guard against quadratic time
> (byte / char / short)
> * Code style and javadoc improvements
>
> Sorting.java
> ----------------------------------------------------------------------
> * New test cases were added
> * Test cases are invoked for both: sequential and
> parallel sorting
> * Check for Object sorting was added
> * New tests were added against heap sort
> * Added test case against bug in parallel merge
> sort on float / double data
>
> ParallelSorting.java
> ----------------------------------------------------------------------
> * This class was removed, because Sorting class
> covers all cases
>
> SortingHelper.java
> ----------------------------------------------------------------------
> * The helper class provides access package-private
> methods of DualPivotQuicksort class during testing
>
> Arrays.java
> ----------------------------------------------------------------------
> * Calls of Dual-Pivot Quicksort were updated
> * Parallel sorting of primitives was switched to parallel
> Dual-Pivot Quicksort
> * Javadoc was updated, double spaces were removed
> * Format changes
>
> ArraysParallelSortHelpers.java
> ----------------------------------------------------------------------
> * Implementation of parallel sorting
> for primitives was removed
> * Javadoc was updated
>
> Thank you,
> Vladimir
>
More information about the core-libs-dev
mailing list