- 论坛徽章:
- 0
|
是这样的,其实最内部的那层循环是一个插入排序的过程,假设当前i定下来,那么就能够得到一个以v [ i]为最后一个元素的间隔为gap的序列,比如说是:...,v [ i-2*gap],v [ i-gap],v [ i],那么将v [ i]插入适当的位置中,这样就能保证每个间隔为gap的序列都是最终有序的。
希尔排序最后就是把gap一直缩小到0达到最终的有序状态的,对于内部的两层循环,我们用数据来枚举
假设我们当时以v [ i]结尾的间隔为gap的序列已经是有序的了,就是...,v [ i-2*gap],v [ i-gap],v [ i]是有序的,那么第二层for循环进入到i变为i+gap的时候,这时候进行的就是将v [ i+gap]插入到...,v [ i-2*gap],v [ i-gap],v [ i]这个序列中适当的位置,此时...,v [ i-2*gap],v [ i-gap],v [ i],v [ i+gap]就是有序的了,这样i从gap取到n-1就保证所有间隔为gap的序列都是有序的了,不知道说了这么多说明白了没有
[ 本帖最后由 daybreakcx 于 2009-5-28 18:12 编辑 ] |
|