shell排序何时进行冗余比较?

时间:2011-10-04 00:26:58

标签: algorithm

我的回答是:

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

我的回答是否正确?

1 个答案:

答案 0 :(得分:1)

你的例子肯定是冗余发生的例子。实际上,Shell Sort中无法避免冗余。正如您所注意到的,当h = 1时,它总是比较先前预处理中已比较的内容。你可以做的一件事就是改善Shell Sort的性能(即减少冗余比较),选择h聪明。例如,如果选择h为4,2,1,则必须将113和112进行三次比较,而如果选择h为5,3,1,则冗余比较将显着减少。选择h的一般规则是不选择2的幂并且不选择彼此的倍数。希望这会有所帮助。