从block sort的维基百科页面我发现块排序的工作原理是将初始数组分成长度为16的小子数组,例如在O(n)时间内对所有这些子数组进行排序,然后合并所有这些块在某种程度上,我无法理解。
例如,考虑一个长度为16的数组,将其除以4个块,每个长度为4,并对这些块进行排序,我们得到:
10 1 8 3 4 19 20 13 14 17 8 9 12 18 7 20
10 1 8 3 ----- 4 19 20 13 ----- 14 17 8 9 ----- 12 18 7 20
1 3 8 10 ----- 4 13 19 20 ----- 8 9 14 17 ----- 7 12 18 20
任何人都可以解释一下合并步骤是如何运作的吗?
答案 0 :(得分:2)
通常合并排序更进一步,并以2的块分割数组。要合并,它会创建一个指向两个块的求解的指针并比较它们的值。它选择较小的并递增相应的指针。
1 4 5 ...
^
2 3 4 ...
^
选择1,因为它较小,并且更新指针
1 4 5 ...
^
2 3 4 ...
^
选择2
1 4 5 ...
^
2 3 4 ...
^
选择3等等......
这些值放在一个数组上,该数组将与使用相同技术创建的另一个数组进行比较。它继续合并,直到所有成员都被排序。我没有考虑你可以在真正的合并算法中进行的大量优化。
答案 1 :(得分:0)
块排序合并的第一件事是提取缓冲区。这是我唯一了解的很多事情,它的开始就是这样。找到数组长度的平方根,并在开头和结尾找到许多唯一值。使用旋转或反转,您可以将它们全部放在开头和结尾。然后,我不知道如何合并其他内容。