Affiliation:
1. LIGM (UMR 8049), CNRS, Université Gustave Eiffel, Marne-la-Vallée, France
Abstract
We present a new sorting algorithm, called
adaptive ShiversSort
, that exploits the existence of monotonic runs for sorting efficiently partially sorted data. This algorithm is a variant of the well-known algorithm
TimSort
, which is the sorting algorithm used in standard libraries of programming languages, such as Python or Java (for non-primitive types). More precisely,
adaptive ShiversSort
is a so-called
\(k\)
-aware merge-sort algorithm, a class that captures ‘
TimSort
-like’ algorithms and that was introduced by Buss and Knop.
In this article, we prove that, although
adaptive ShiversSort
is simple to implement and differs only slightly from
TimSort
, its computational cost, in number of comparisons performed, is optimal within the class of
natural
merge-sort algorithms, up to a small additive linear term. This makes
adaptive ShiversSort
the first
\(k\)
-aware algorithm to benefit from this property, which is also a 33% improvement over
TimSort
's worst-case. This suggests that
adaptive ShiversSort
could be a strong contender for being used instead of
TimSort
.
Then, we investigate the optimality of
\(k\)
-aware algorithms. We give lower and upper bounds on the best approximation factors of such algorithms, compared to optimal stable natural merge-sort algorithms. In particular, we design generalisations of
adaptive ShiversSort
whose computational costs are optimal up to arbitrarily small multiplicative factors.
Publisher
Association for Computing Machinery (ACM)
Reference23 articles.
1. Nicolas Auger, Vincent Jugé, Cyril Nicaud, and Carine Pivoteau. 2018. On the worst-case complexity of Timsort. In Proceedings of the 26th Annual European Symposium on Algorithms (ESA ’18). Schloss Dagstuhl–Leibniz-Zentrum für Informatik, 4:1–4:13. Retrieved from https://arxiv.org/abs/1805.08612
2. Nicolas Auger, Cyril Nicaud, and Carine Pivoteau. 2015. Merge Strategies: From Merge Sort to Timsort. Research Report hal-01212839. HAL.
3. On compressing permutations and adaptive sorting
4. Josh Bloch. 2021. Timsort Implementation in Java. Retrieved from https://github.com/openjdk/jdk/blob/3afeb2cb4861f95fd20c3c04f04be93b435527c0/src/java.base/share/classes/java/util/ComparableTimSort.java
5. Strategies for Stable Merge Sorting