Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.68 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. func main() {
  8. items := []int{4, 202, 3, 9, 6, 5, 1, 43, 506, 2, 0, 8, 7, 100, 25, 4, 5, 97, 1000, 27}
  9. shellshort(items)
  10. fmt.Println(items)
  11. }
  12.  
  13. func shellshort(items []int) {
  14. var (
  15. n = len(items)
  16. gaps = []int{1}
  17. k = 1
  18.  
  19. )
  20.  
  21. for {
  22. gap := pow(2, k) + 1
  23. if gap > n-1 {
  24. break
  25. }
  26. gaps = append([]int{gap}, gaps...)
  27. k++
  28. }
  29.  
  30. for _, gap := range gaps {
  31. for i := gap; i < n; i += gap {
  32. j := i
  33. for j > 0 {
  34. if items[j-gap] > items[j] {
  35. items[j-gap], items[j] = items[j], items[j-gap]
  36. }
  37. j = j - gap
  38. }
  39. }
  40. }
  41. }
  42.  
  43. func pow(a, b int) int {
  44. p := 1
  45. for b > 0 {
  46. if b&1 != 0 {
  47. p *= a
  48. }
  49. b >>= 1
  50. a *= a
  51. }
  52. return p
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement