归并排序通常采用递归方式实现,而 Timsort 则采用迭代方式,从左向右处理数组。在分拣过程中,Timsort 找到连续的有序序列(run),并维持一个栈来跟踪这些 run 的起始索引和长度。当栈中的 run 合并时,算法尝试维持一个平衡,以便在可能的情况下尽早合并已缓存的 run,同时充分利用数据中的模式。
Timsort 的平衡条件包括:保持 run 的增长速度至少与斐波那契数列一样快,并确保合并的 run 长度不固定,以减少比较次数和提高效率。算法通过二分查询查找 run 之间的元素位置,减少元素移动,提高性能。
此外,Timsort 在合并 run 时采用 galloping 模式加速查找,同时利用二分搜索减少比较次数。对于递减的 run,算法会将其反转以保持稳定性。最小 run 的大小有助于优化合并效率,确保数组分割为接近二的幂次。