Algorithm Shell排序和插入排序
我有个问题。我对shell排序和插入排序算法感到非常困惑。我们应该如何区分彼此 您可以将插入排序作为连续元素的一系列比较和交换来实现。这使它成为一种“稳定的类型”。相反,Shell sort比较并交换彼此相距较远的元素。这使它更快 我认为您的困惑来自这样一个事实:shell排序可以实现为应用于不同数据子集的多个插入排序。请注意,这些子集由数据序列的非连续元素组成 有关更多详细信息,请参阅维基百科;-) 是一种简单的就地O(N^2)排序。有点复杂,更难理解,在O(N^(5/4))附近。查看链接以获取示例——应该很容易看出区别。是的通用版本。两种算法的基本原理相同。您有一个长度为n的排序序列,并将未排序的元素插入其中-您将得到n+1元素的长排序序列 区别如下:插入排序只对一个序列(最初是数组的第一个元素)起作用,并扩展它(使用下一个元素)。 但是,shell sort的增量逐渐减小,这意味着比较的元素之间存在差距(最初n/2)。因此,有n/2个序列需要使用插入排序进行排序。在每一步中,增量都会缩小(通常只除以2.2),序列的数量也会减少。最后一步没有间隙,算法退化为简单的插入排序Algorithm Shell排序和插入排序,algorithm,data-structures,Algorithm,Data Structures,我有个问题。我对shell排序和插入排序算法感到非常困惑。我们应该如何区分彼此 您可以将插入排序作为连续元素的一系列比较和交换来实现。这使它成为一种“稳定的类型”。相反,Shell sort比较并交换彼此相距较远的元素。这使它更快 我认为您的困惑来自这样一个事实:shell排序可以实现为应用于不同数据子集的多个插入排序。请注意,这些子集由数据序列的非连续元素组成 有关更多详细信息,请参阅维基百科;-) 是一种简单的就地O(N^2)排序。有点复杂,更难理解,在O(N^(5/4))附近。查看链接以获
由于增量递减,大小元素将快速移动到数组的正确部分,并且比上一步使用插入排序进行排序的速度更快。这会降低时间复杂度O(n^(4/3))它们是完全不同的算法。但是它是如何变得不同的呢?请解释一下……你读过维基百科的文章吗?他们对这两种算法给出了很好的解释。你可以问自己是否能将其中一种算法与其他算法或实现区分开来。假设您确实想要比较实现,那么对于不同类型的输入,这些算法的复杂性应该会更好。这是一个非常好的答案。所有的事实都在这里。非常感谢。N/2通常不是Shell排序的最佳起始增量。维基百科的文章中有一个关于选择增量的好章节。否则,这是一个很好的答案。