2

当我遇到上述声明时,我正在阅读 shell-sorting。这意味着什么以及它对我看待 shell 排序的方式有什么影响?

PS:我不是在寻找声明的证据。

4

5 回答 5

3

好吧,您可能暗示下一个排序阶段不会“搞砸”前面的步骤:如果您对数组进行 g 排序然后执行 h 排序,则结果数组仍然是 g 排序的,所以它“没有错“关于应用 h 排序。并且由于插入排序(shellsort 基于它)对于几乎有序的数组来说很快,你可以说 h 排序做了一些积极的事情(如果它改变了一些东西)并且没有那么大的成本造成伤害。所以它总是一个进步:它要么几乎是线性的,要么在排序方面取得了一些进展。

显然,选择步长值的问题对于 shellsort 来说是一个单独且非常重要的问题。

于 2013-06-05T11:15:19.673 回答
1

据我所知,我认为这意味着,如果数组是使用步骤 G 排序的 Shell,则在使用步骤 H 排序后,它将保持使用步骤 G 排序。G 和 H 之间的关系很重要,我想对于H < G,但不要想当然。

但是,如果没有原始文本,很难猜测它可能意味着什么。

于 2013-06-05T11:05:37.103 回答
0

基本上,这只是意味着存在一些转换 h ,因此一旦将转换 h 应用于具有 g-sorted 属性的列表,它仍然是 g-sorted,使其也是 h-sorted。

在 shell 排序的上下文中,我对这个概念的理解是,在应用使列表 g 排序的转换之后,每个 gth 元素的序列都是排序的。这条语句意味着即使在对列表应用 h-sort 转换,使其成为 h-sorted 之后,列表仍然具有 g-sorted 属性。

这样做的重要意义在于,对数组进行 h 排序不会撤消之前的排序步骤,从而确保列表最终会被排序。

于 2013-06-05T11:17:40.150 回答
0

嗯,下面的数组是 5 排序的,如果我们对它进行 7 排序,最终的结果就不再是 5 排序了。因此,如果 h <= g,它认为上述陈述是正确的。

索引:[0 到 29]、30、35、40、42

值:[...-1..]、10、15、20、0

于 2014-09-25T18:51:21.193 回答
0

这只是意味着,如果两个元素在执行 g-sort 时排序,即使在 h <= g 的 h-sorted 之后,它们也将保持排序状态。

于 2014-10-21T17:42:49.920 回答