尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行 插入排序。
如将下面数组进行排序:
1、d =len(a)/2=3,036一组,14一组,25一组,如下
排序后如下:
2、d=d/2=1,只剩全体一组了
注意:当数组为偶数时,1~8;开始d=4,15 26 37 48分四组
代码:当数组为奇数时: 1~9;开始d=4,159 26 37 48也分四组,(注意159三个数一组)
func ShellSort(a []int){
d:=len(a)/2
for d>0 {
for i:=0;i<d;i++ {
for j := i+d;j<len(a);j+=d {
temp := a[j]
k := j-d
for k>=i && a[k] > temp {
a[k+d] = a[k]
k -= d
}
a[k+d]= temp
}
}
d = d/2
}
fmt.Println(a)
}