假设我得到了这些整数6,1,4,2,1,5,9,6,3,4并且run的大小是2,所以我们从每次运行的插入排序开始,我得到这些子数组:
1-6,2-4,1-5,6-9,3-4
我的问题是如何合并它们以获取排序数组?我的意思是我合并每个两个数组,然后其余等等?
答案 0 :(得分:0)
创建初始运行后,然后合并运行。 Timsort使用堆栈来跟踪运行边界,并使用堆栈上的前3个条目来决定合并到哪个运行" balance"合并,同时保持稳定"。可以使用队列(FIFO)而不是堆栈(LIFO)(尽管我不确定这是否仍然是技术上的时间)。使用10个元素,运行大小为3将减少一次合并传递。 Timsort通常使用较大的最小运行尺寸,32到64(含),如果自然运行小于其计算的理想最小运行尺寸,则使用插入排序强制最小运行尺寸。链接到wiki文章: