希尔排序法基本思想是:取一个间隔,将长序列分成若干短的子序列,对每个子序列进行直插排序;然后逐渐缩小间隔,重复以上过程,直到间隔为1
前面我们学习了两种插入排序法,但当要排序的数组长度越长并且数值越不成顺序,比较和交换的次数就越多,效率越低。因此D.L.Shell在1959年提出了缩小增量排序法(又叫希尔排序法),基本思想是:取一个间隔,将长序列分成若干短的子序列,对每个子序列进行直插排序;然后逐渐缩小间隔,重复以上过程,直到间隔为1。可以看到这种算法,较好的克服了直接插入排序法的不足。
下面是示例:
8 7 4 3 6 1 //是要排序的数值,我们以一半的长度为间隔3
3 7 4 8 6 1 //第一次,取得3,小于前面的8,交换位置
3 6 4 8 7 1 //第二次,取得6,小于前面的7,交换位置
3 6 1 8 7 4 //第三次,取得1,小于前面的4,交换位置
1 6 3 4 7 8 //第四次,再缩小间隔,为2,取得1小于3,交换位置,取得7,大于前面的3,不变;取得8大于6,不变,取得4小于8,交换位置
1 ...[ 查看全文 ]