golang 希尔排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 希尔排序相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
)

func main() {
	items := []int{4, 202, 3, 9, 6, 5, 1, 43, 506, 2, 0, 8, 7, 100, 25, 4, 5, 97, 1000, 27}
	shellshort(items)
	fmt.Println(items)
}

func shellshort(items []int) {
	var (
		n = len(items)
		gaps = []int{1}
		k = 1
	
	)
	
	for {
		gap := pow(2, k) + 1
		if gap > n-1 {
			break
		}
		gaps = append([]int{gap}, gaps...)
		k++
	}
	
	for _, gap := range gaps {
		for i := gap; i < n; i += gap {
			j := i
			for j > 0 {
				if items[j-gap] > items[j] {
					items[j-gap], items[j] = items[j], items[j-gap]
				}
				j = j - gap
			}
		}
	}
}

func pow(a, b int) int {
	p := 1
	for b > 0 {
		if b&1 != 0 {
			p *= a
		}
		b >>= 1
		a *= a
	}
	return p
}

❤️数据结构入门❤️(4 - 8)- 希尔排序

一、希尔排序的定义

二、希尔排序的图解

三、希尔排序的实现

1、希尔排序的插入

2、希尔排序的删除

3、希尔排序的修改

4、希尔排序的查找

四、希尔排序的刷题实战


🧡 本文内容更新档期,预计 2021年08月中旬,敬请期待!
🧡 若订阅了该专栏,该数据结构相关的问题,也可以提前咨询作者。
🧡 VIP求助通道微信:18368041307


以上是关于golang 希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

golang 希尔排序

golang 希尔排序

❤️数据结构入门❤️(4 - 8)- 希尔排序

希尔排序的介绍和希尔排序基本思想以及代码实现

希尔排序

希尔排序