Guest User

Untitled

a guest
Jul 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. def Worker.sort(array, tmp, head, tail)
  2. #puts "GOT #{array.object_id} , #{head}, #{tail} : LEN = #{ tail-head} : #{tail-head > 0 }"
  3. if tail-head > 1
  4. mid = head +((tail-head) /2)
  5. #puts " 1 split TO #{head} - #{mid}"
  6. Worker.sort(array,tmp, head, (mid))
  7. #puts " 2 split TO #{mid+1} - #{tail}"
  8. Worker.sort(array,tmp, (mid+1), tail)
  9. #puts " 3 merge #{array.inspect}, #{head} #{mid} #{mid+1}, #{tail}"
  10. Worker.merge(array,tmp, head, mid, mid+1, tail)
  11. else
  12. #puts "Local switch"
  13. if array[head] > array[tail]
  14. array[head], array[tail] = array[tail], array[head]
  15. end
  16. end
  17. end
  18.  
  19.  
  20. def Worker.merge(array, tmp_array, head1, tail1, head2, tail2)
  21. pr = head1
  22. p1 = head1
  23.  
  24. tmp_array[head1..tail1] = array[head1..tail1]
  25.  
  26. while p1 <= tail1 and head2 <= tail2
  27. if array[head2] > tmp_array[p1]
  28. array[pr] = tmp_array[p1]
  29. p1 +=1
  30. else
  31. array[pr] = array[head2]
  32. head2 +=1
  33. end
  34. #puts " PR #{pr}"
  35. pr += 1
  36. end
  37.  
  38. diff = tail1 - p1
  39. array[pr..(pr+diff)] = tmp_array[p1..(p1+diff)] if diff >= 0
  40.  
  41. #puts " |> #{ array.inspect}"
  42. end
Add Comment
Please, Sign In to add comment