Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement