Algorithm TimSort:在给定单个块内识别自然运行的最佳算法

Algorithm TimSort:在给定单个块内识别自然运行的最佳算法,algorithm,sorting,timsort,Algorithm,Sorting,Timsort,问题:timsort如何在分块或生成块大小[32-64项]的运行期间确定最佳方法是搜索升序或降序运行 Known Fact : A run in timsort is a natural occurring sorted order of data items [ either ascending or descending ]. 示例:假设一个块大小为6的数组用于排序。在提供的数据数组中遇到的6块如下所示。 进一步假设数组是按升序排序的 arr = {..............7, 11,

问题:timsort如何在分块或生成块大小[32-64项]的运行期间确定最佳方法是搜索升序或降序运行

Known Fact : A run in timsort is a natural occurring sorted order of data items [ either ascending or descending ].
示例:假设一个块大小为6的数组用于排序。在提供的数据数组中遇到的6块如下所示。 进一步假设数组是按升序排序的

arr = {..............7, 11, 9, 6, 5, 2, ..................}. 
如果我们看到前两项7、11所提供的提示,这将增加运行的子部分。 在这一点上,考虑接下来的4项以确保我们维持或寻找一个增加的运行将是低效的,因为它实际上是一个减少的运行[9,6,5,2]。 binaryInsertionSort算法将按如下所示的递增顺序对其进行排序

七,

7,11

7、9、11

6,7,9,11

Result=2, 5, 6, 7, 9, 11---------(A)
5,6,7,9,11

Result=2, 5, 6, 7, 9, 11---------(A)
事实上,最有效的方法应该是

7、11->一次完整的上升跑步

9,6,5,2->一次完整的下降运行

合并([7,11],[9,6,5,2])

merge([7,11],[2,5,6,9])//第二个数组的就地反转

Result=2, 5, 6, 7, 9, 11 -------(B)

Fact: (B) is more efficient then (A) from computing perspective.
问题:

对于给定的块大小,Tim sort实际执行(A)还是(B) [例:-32至64项]。 i、 e在满足块大小之前,是否逐步识别 是否对每个项目执行binaryInsertionSort以生成排序的运行

它是否真的首先扫描整个块以识别已经发生的事件 自然排序的子序列以有效地合并它们?

它可以(A)。然后是