我的回答是:
Shell排序进行冗余比较,因为如果在远距离的元素比较期间(当h
在8
附近时),它会比较两个将成为邻居的元素,然后比较相同的元素在比较彼此靠近的元素时(h
在1
附近时)的元素。例如,如果列表是113 400 818 612 112 311 412 429
,则h = 4
时,它会比较113
和112
,而当h = 1
时,它会比较113
并再次112
,因为它将比较彼此最接近的元素。
我的回答是否正确?
答案 0 :(得分:1)
你的例子肯定是冗余发生的例子。实际上,Shell Sort中无法避免冗余。正如您所注意到的,当h = 1时,它总是比较先前预处理中已比较的内容。你可以做的一件事就是改善Shell Sort的性能(即减少冗余比较),选择h聪明。例如,如果选择h为4,2,1,则必须将113和112进行三次比较,而如果选择h为5,3,1,则冗余比较将显着减少。选择h的一般规则是不选择2的幂并且不选择彼此的倍数。希望这会有所帮助。