希尔排序也是插入排序的一种,是插入排序的改进版本。
插入排序是将数组划分为有序和无序两个序列,通过将无序序列元素逐步插入到有序序列中,从而达到排序的目的,本质上依旧是将数组元素一个个进行比较,选择排序在数组元素个数较少的情况下,简单而有序效,但当数组元素为逆序时,将耗费大量的时间。
希尔排序在插入排序的基础上,选择一个数值,以这个数值为间隔,将数组元素划分为若干组,分组进行插入排序。
随着数值的逐步减小,直至最后比较相邻元素。
以数组arr={1,7,9,8,2,4,0,3,5,6,11}进行降序排序为例:
希尔排序的第一步便是选取数值来进行插入排序
在此选择数组长度/2向下取整
11/2 = 5,所以以5为基准,将数组进行划分:
1为0号元素,0+5 = 5,5号元素对应的是4,则{1,4}划分为一组。
然后向后偏移一位,1号元素与5号元素相对应,{7,0}划分为一组。
同理,将剩下其他元素划分。
第一次划分结果如下所示:
{1,4},{7,0},{9,3},{8,5},{2,6},{4,11}
即:
{1,4,11}
{7,0},
{9,3},
{8,5},
{2,6}