希尔排序法
Posted 算法精解
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序法相关的知识,希望对你有一定的参考价值。
简介
算法描述
图1 希尔排序过程
func ShellSort(arr[] int) {
// 计算第1次的增量
d := len(arr) / 2
// 循环至增量为1时结束
for d >= 1 {
for i := d; i < len(arr); i++ {
// 获取序列中的下一个数据
next := arr[i]
// 序列中前一个数据的序号
j := i - d
// 下一个数大于钱一个属
for j >= 0 && arr[j] > next {
arr[j + d] = arr[j]
j = j - d
}
// 保存数据
arr[j + d] = next
}
// 缩小增量
d /= 2
}
}
func TestShellSort(t *testing.T) {
rand.Seed(time.Now().Unix())
var arr []int
for i := 0; i < 10; i++ {
temp := rand.Intn(1000)
arr = append(arr, temp)
}
originSort, origin := append([]int{}, arr...), append([]int{}, arr...)
sort.Ints(originSort)
shellSort.ShellSort(arr)
if !reflect.DeepEqual(originSort, arr) {
t.Errorf("Got %v for input %v; expected %v", arr, origin, originSort)
}
}
相关文章:
《零基础学算法第2版》4.6直接插入排序法
以上是关于希尔排序法的主要内容,如果未能解决你的问题,请参考以下文章