ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ 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) } ~~~