块排序算法

问题描述 投票:0回答:2

从维基百科页面的块排序我发现块排序的工作原理是将初始数组划分为长度为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

任何人都可以解释一下合并步骤是如何工作的吗?

sorting mergesort
2个回答
0
投票

块排序合并的第一件事是提取缓冲区。这是我唯一了解的事情,事情就是这样开始的。求数组长度的平方根,并在开头和结尾找到许多唯一值。使用旋转或反转,您可以将它们全部放在开头和结尾。然后,我不知道如何合并其他东西。


0
投票

通常合并排序会更进一步,将数组分成 2 个块。为了合并,它会创建一个指向两个块开头的指针并比较它们的值。它选择较小的并递增相应的指针。

1 4 5 ...
^
2 3 4 ...
^

选择 1,因为它较小,并更新指针

1 4 5 ...
  ^
2 3 4 ...
^

选2

1 4 5 ...
  ^
2 3 4 ...
  ^

选择3个等等......

这些值被放入一个数组中,该数组将与使用相同技术创建的另一个数组进行比较。如此不断地进行合并,直到所有成员都被排序。我没有考虑在真正的合并算法中可以进行的无尽优化。

© www.soinside.com 2019 - 2024. All rights reserved.