Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def Worker.sort(array, tmp, head, tail)
- #puts "GOT #{array.object_id} , #{head}, #{tail} : LEN = #{ tail-head} : #{tail-head > 0 }"
- if tail-head > 1
- mid = head +((tail-head) /2)
- #puts " 1 split TO #{head} - #{mid}"
- Worker.sort(array,tmp, head, (mid))
- #puts " 2 split TO #{mid+1} - #{tail}"
- Worker.sort(array,tmp, (mid+1), tail)
- #puts " 3 merge #{array.inspect}, #{head} #{mid} #{mid+1}, #{tail}"
- Worker.merge(array,tmp, head, mid, mid+1, tail)
- else
- #puts "Local switch"
- if array[head] > array[tail]
- array[head], array[tail] = array[tail], array[head]
- end
- end
- end
- def Worker.merge(array, tmp_array, head1, tail1, head2, tail2)
- pr = head1
- p1 = head1
- tmp_array[head1..tail1] = array[head1..tail1]
- while p1 <= tail1 and head2 <= tail2
- if array[head2] > tmp_array[p1]
- array[pr] = tmp_array[p1]
- p1 +=1
- else
- array[pr] = array[head2]
- head2 +=1
- end
- #puts " PR #{pr}"
- pr += 1
- end
- diff = tail1 - p1
- array[pr..(pr+diff)] = tmp_array[p1..(p1+diff)] if diff >= 0
- #puts " |> #{ array.inspect}"
- end
Add Comment
Please, Sign In to add comment