多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> ### 十七例 插入排序 - 希尔排序 ~~~ package main import ( "fmt" "math/rand" "time" ) //冒泡, 插入排序, 每次交换消除一个逆序对. 要提高算法的效率, 我们必须每次消除不止一个逆序对, 每次交换相隔较远的两个元素 //TODO : 插入排序 - 希尔排序 (希尔增量 L/2) //还有一些其它的增量: Hibbard增量:{1, 3, ..., 2^k-1} ... func ShellSort(data []int, L int) { t := time.Now() for i := L / 2; i > 0; i /= 2 { //增量 for j := i; j < L; j ++ { //插入排序 for k := j; k >= i && data[k] < data[k-i]; k -= i { data[k], data[k-i] = data[k-i], data[k] } } } fmt.Println("ShellSort - Time:", time.Since(t)) } func main() { rand.Seed(time.Now().Unix()) number := make([]int, 500000, 10000000) for k, _ := range number { number[k] = rand.Intn(1000000000) } L := len(number) //插入排序 - 希尔排序 ShellSort(number, L) } ~~~