algorithm - shell排序什么时候进行冗余比较?

标签 algorithm

我的回答是:

Shell 排序进行冗余比较,因为如果在比较相距很远的元素时(当 h 大约在 8 时),它比较两个将成为邻居的元素,然后在比较彼此靠近的元素时(当 h 大约为 1 时)将再次比较相同的元素。例如,如果列表是 113 400 818 612 112 311 412 429,当 h = 4 时,它将比较 113112 ,当 h = 1 时,它将再次比较 113112,因为它将比较彼此最接近的元素.

我的回答正确吗?

最佳答案

您的示例绝对是发生冗余的示例。事实上,在 Shell 排序中,冗余是不可避免的。正如您所注意到的,当 h = 1 时,它总是比较在之前的预处理中已经比较过的东西。要提高 Shell 排序的性能(即减少冗余比较),您可以做的一件事是巧妙地选择 h。例如,如果选择h为4、2、1,那么113和112要进行3次比较,而如果选择h为5、3、1,则冗余比较明显减少。选择 h 的一般规则是不要选择 2 的幂,也不要选择彼此的倍数。希望这会有所帮助。

关于algorithm - shell排序什么时候进行冗余比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642132/

相关文章:

c++ - 仅在相等可用时排序

将 2D/3D 对象投影到平面上的算法(增强现实)?

algorithm - 如何生成一组易于检查但难以欺骗的(短)唯一标识符?

java - 使用arraylist的递归方法的stackoverflowerror

algorithm - 如何在内存较少的矩阵中找到连续区域?

algorithm - 什么术语描述了在不知道其他坐标的情况下生成坐标的过程/分形生成?

algorithm - 欧几里德的 GCD 空间复杂度算法

java - 合并排序与插入排序

java - N * N 皇后算法获取坐标

algorithm - 表示非方形棋盘游戏的数据结构