golang ----------- 希尔排序

尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行 插入排序。

如将下面数组进行排序:


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)
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值