Skip to main content

希尔排序

时间复杂度:

原理(降序):

希尔排序本质是分组排序,即将一个序列分为多组,然后每个组执行插入排序。

步骤(降序):

1、获取序列长度,取其长度的一半作为步长。
2、以当前 step 截取序列,并对当前序列执行插入排序。
3、循环获取一半长度的 step,并对获取到的序列执行插入排序。

https://github.com/czasg/strualgo/blob/main/algo/sort/shell.go
package sort

import "github.com/czasg/strualgo/basis"

func ShellSortASC[Number basis.Number](nums []Number) []Number {
newNums := make([]Number, len(nums))
for index, num := range nums {
newNums[index] = num
}
if len(newNums) < 2 {
return newNums
}
for step := len(newNums) / 2; step > 0; step /= 2 {
for i := step; i < len(newNums); i++ {
index := i
for index >= i {
if newNums[index-step] > newNums[index] {
newNums[index-step], newNums[index] = newNums[index], newNums[index-step]
index -= step
continue
}
break
}
}
}
return newNums
}