数据结构&算法 希尔排序
-
希尔排序
希尔排序是一种高效的排序算法,它基于插入排序算法。如果较小的值在最右边并且必须移到最左边,则该算法避免了在插入排序的情况下的大移位。该算法对广泛分布的元素使用插入排序,首先对它们进行排序,然后对间距较小的元素进行排序。该间隔称为间隔。该间隔是根据Knuth公式计算的-Knuth公式对于中等大小的数据集,此算法非常有效,因为该算法的平均复杂度和最坏情况的复杂度取决于间隙序列,众所周知,该间隙序列是Ο(n),其中n是项数。最坏的情况是空间复杂度为O(n)。 -
希尔排序如何工作?
让我们考虑以下示例,以了希尔排序的工作原理。我们采用与先前示例相同的数组。对于我们的示例和易于理解,我们采用4的间隔。为位于4个位置的间隔的所有值创建一个虚拟子列表。这些值是{35,14},{33,19},{42,27}和{10,44}我们比较每个子列表中的值,并在原始数组中交换它们(如果需要)。完成此步骤后,新数组应如下所示:然后,我们取间隔1,此间隔生成两个子列表-{14,27,35,42},{19,10,33,44}如果需要,我们将比较并交换原始数组中的值。完成此步骤后,数组应如下所示:最后,我们使用值1的间隔对数组的其余部分进行排序。希尔排序使用插入排序对数组进行排序。以下是分步描述-我们看到它只需要四个交换就可以对数组的其余部分进行排序。 -
算法
以下是希尔排序的算法。 -
伪码
现在我们将看到希尔排序函数的伪代码。正如我们的算法指出的两个主要功能-分和合并。希尔排序与递归一起工作,我们将以相同的方式看到实现。 -