实现原理
使数组中任意间隔为h的元素都是有序的。然后缩减h再次进行排序,最后缩减到1
效率分析
数学上无法确定希尔排序需要的平均比较次数,最坏情况下是N,达不到平方的级别。希尔排序的代码量很少,且不需要额外的内存空间。在嵌入式平台上比较常用。
代码实现
func sort(a []int) {N := len(a)h := 1for h < N / 3 {h = 3 * h + 1}for h >= 1 {for i := h; i < N; i++ {// a[i], a[i-h], a[i-2*h]... 做插入排序for j := i; j >= h && less(a[j], a[j - h]); j -= h {exch(a, j, j - h)}}h = h / 3}}
