一 、 希尔排序
希尔排序由希尔在1959年提出,是直接插入排序的一种更高效的优化版版本。其通过设置增量,将要进行排序的序列按增量间隔分成若干个子序列,再对子序列进行直接插入的方法进行排序,之后减小增量并重复以上过程直到增量减为1。由于最优的增量值是一个难以解决的问题,所以一般设置初始增量为所排序列长度的一半。
二、过程图解
注明(图片参考其他博客)
三、算法特点
希尔排序利用粗调的方法减少了插入排序算法的工作量,使得算法的平均复杂度低于O(N^2)。
但在某些极端的条件下,希尔排序的复杂度任然为O(N^2),甚至比插入排序更慢。因此希尔排序也是一种不稳定的排序方法。
希尔排序算法需要一个临时变量存储插入元素,所需额外空间为1,所以它的空间复杂度为O(1)。
四、代码及结果
void shell_sort(int arr[],int len)
31 {
32 int tem,gap;
33 int i,j;
34 for(gap=len/2;gap>=1;gap/=2)//设置间隔为数组的一半并在一次循环后缩减一半直到增量为1
35 {
36 for(i=gap;i<len;i++)//从下标为gap的数据开始对间隔为gap的数据进行插入排序
37 {
3