Guest User

Untitled

a guest
Feb 18th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. // Round returns the nearest integer, rounding ties away from zero.
  8.  
  9. func merge(a, b []int) []int {
  10.  
  11. size, i, j := len(a)+len(b), 0, 0
  12.  
  13. result := make([]int, size)
  14. for k := 0; k < size; k++ {
  15.  
  16. switch true {
  17. case i == len(a):
  18. //alll the elements of a already been judged
  19. //assuming a nd b both are sorted, this happens because
  20. //some cases will have not equal a and b, so it might
  21. // be a possibility that one array got finished earlier.
  22. result[k] = b[j]
  23. j += 1
  24.  
  25. case j == len(b):
  26. //alll the elements of a already been judged
  27. //assuming a nd b both are sorted
  28. result[k] = a[i]
  29. i += 1
  30.  
  31. case a[i] > b[j]:
  32. result[k] = b[j]
  33. //increment the index of b array because its present index element
  34. //is already appended to the result array
  35. j += 1
  36.  
  37. case a[i] < b[j]:
  38.  
  39. //increment the index of a array because its present index element
  40. //is already appended to the result array
  41. result[k] = a[i]
  42. i += 1
  43.  
  44. case a[i] == b[j]:
  45. //in case of equality
  46. result[k] = b[j]
  47. j += 1
  48.  
  49. }
  50.  
  51. }
  52. return result
  53. }
  54.  
  55. func MergeSort(numbers []int) []int {
  56.  
  57. if len(numbers) < 2 {
  58. return numbers
  59. }
  60.  
  61. middle := int(len(numbers) / 2)
  62.  
  63. return merge(MergeSort(numbers[middle:]), MergeSort(numbers[:middle]))
  64. }
  65.  
  66. func main() {
  67. a := []int{2, 1, 3, 4, 50, 78, 32, 33, 45, 45, 45, 91, 99, 37, 102, 102, 104, 106, 109, 106}
  68. fmt.Println(MergeSort(a))
  69. }
Add Comment
Please, Sign In to add comment