vlambda博客
学习文章列表

109,排序-希尔排序

希尔排序也成缩小增量排序,原理是将待排序列划分为若干组,每组都是不连续的,有间隔step,step可以自己定,但间隔step最后的值一定是1,也就说最后一步是前后两两比较。间隔为step的默认划分为一组,先在每一组内进行排序,以使整个序列基本有序,然后再减小间隔step的值,重新分组再排序……不断重复,直到间隔step小于1则停止。还是先看代码

代码还是比较简单的,我们画个图来说明一下

109,排序-希尔排序

上面的排序其实和冒泡排序很像,只不过冒泡排序是每次都是间隔为1相邻的两个之间进行比较,但希尔排序是间隔为step,还是有一定区别的,我们再看另一种写法

109,排序-希尔排序

首先它是把待比较的变量保存到temp中,然后往前找,如果前面的比他大,就会把前面的值挪到当前位置,然后再往前找,如果还比当前大那么还挪,直到循环完为止,然后再把当前保存的temp值放到最前面挪动的那个值。这个挪动和前面介绍的插入排序的挪动有点类似,只不过插入排序的挪动是一个个往前比较(二分法插入例外),而这个挪动是每间隔step进行比较然后确定是否挪动。我们上面使用的间隔是数组长度的一半,这个间隔实际上是可以自己定的,但一定要保证间隔最后的一步是1即可,希尔排序中大家都比较认可的一种计算间隔的公式是step = step * 3 + 1;我们再来看一下代码

关注,点赞,评论,转发