Guest User

Untitled

a guest
Jan 19th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. @merges = 0
  2. @merge_sorts = 0
  3.  
  4. def merge(left, right)
  5. @merges += 1
  6. result = []
  7. while(left.size > 0 || right.size > 0)
  8. if(left.size > 0 && right.size > 0)
  9. if(left[0] <= right[0])
  10. first, *rest = *left
  11. result << first
  12. left = rest
  13. else
  14. first, *rest = *right
  15. result << first
  16. right = rest
  17. end
  18. elsif(left.size > 0)
  19. first, *rest = *left
  20. result << first
  21. left = rest
  22. elsif(right.size > 0)
  23. first, *rest = *right
  24. result << first
  25. right = rest
  26. end
  27. end
  28. result
  29. end
  30.  
  31. def merge_sort(m)
  32. @merge_sorts += 1
  33. return m if(m.size <= 1)
  34. left, right = [], []
  35. middle = m.size / 2
  36. m[0..(middle-1)].each { |x| left << x }
  37. m[middle..-1].each {|x| right << x}
  38.  
  39. left.replace(merge_sort(left))
  40. right.replace(merge_sort(right))
  41.  
  42. merge(left, right)
  43. end
  44.  
  45. va = 50.times.collect {|x| rand(100)}.uniq
  46.  
  47. puts "initial: " + va.inspect
  48. puts "final: " + merge_sort(va).inspect
  49. puts "merges: " + @merges.to_s
  50. puts "merge_sorts: " + @merge_sorts.to_s
Add Comment
Please, Sign In to add comment