Hi, It sounds interesting. However, I suppose they have the same worst-case complexity O(nlogn). Could we formally have the average complexity? Best, -Van Chan On Mon, Oct 2, 2017 at 12:11 AM, Christophe Raffalli wrote: > Hello, > > Here is an algorithm I found nice to sort lists. It is in O(n ln(k)) > where n is the size and k the number of changes of direction in the list. > > for [ 1; 5; 10; 15; 20; 10; 2; 3; 5; 7], k = 3. > > This implementation is a stable sort. > > It is "almost" as fast as List.sort in the bad cases (Random lists) > (when k ~ n) and can be much faster if k is small as expected... > > A challenge: find a similar algorithm, for lists, that is always > faster than List.sort ... I have tried a lot and I was always 5% slower > on the bas cases ... (Try to remain stable) > > Enjoy, > Christophe > > PS: the benchmark: > > Correctness test passed > Stability test passed > Random lists: > random: tf = 1.53, tg = 1.56, factor = 0.98x, gain = -2.33% > random small: tf = 1.37, tg = 1.44, factor = 0.95x, gain = -4.88% > Worst cases: > worst1: tf = 1.31, tg = 1.38, factor = 0.95x, gain = -5.18% > worst2: tf = 1.32, tg = 1.36, factor = 0.98x, gain = -2.49% > Sorted (partially) lists: > sorted: tf = 1.28, tg = 0.01, factor = 97.21x, gain = 98.97% > reversed: tf = 1.31, tg = 0.17, factor = 7.76x, gain = 87.11% > sorted@rev: tf = 1.33, tg = 0.37, factor = 3.60x, gain = 72.23% > rev@sorted: tf = 1.30, tg = 0.38, factor = 3.44x, gain = 70.94% > Shuffled lists (permute k times 2 elements in a sorted list): > shuffle 10: tf = 1.35, tg = 0.80, factor = 1.68x, gain = 40.64% > shuffle 100: tf = 1.36, tg = 1.07, factor = 1.27x, gain = 21.56% > shuffle 1000: tf = 1.38, tg = 1.20, factor = 1.15x, gain = 13.17% > shuffle 10000: tf = 1.41, tg = 1.25, factor = 1.13x, gain = 11.45% >