Advertisement
Guest User

merge sort

a guest
Dec 16th, 2011
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.00 KB | None | 0 0
  1. require 'minitest/autorun'
  2.  
  3. class Algo
  4.   def merge_sort a
  5.     if a.size > 1
  6.       m = a.size / 2
  7.       n = a.size - m
  8.       a1 = []
  9.       a2 = []
  10.       0.upto(m - 1) do |i|
  11.         a1[i] = a[i]
  12.       end
  13.       0.upto(n - 1) do |i|
  14.         a2[i] = a[m + i]
  15.       end
  16.      
  17.       merge_sort(a1);
  18.      
  19.       puts "before merge_sort. a2: #{a2.inspect}"
  20.       merge_sort(a2);
  21.       puts "after merge_sort. a2: #{a2.inspect}"
  22.  
  23.       merge(a1, a2, a);
  24.     end
  25.  
  26.     a
  27.   end
  28.  
  29.   def merge(a1, a2, a)
  30.     i = 0
  31.     j = 0
  32.     while i < a1.size || j < a2.size
  33.       if j >= a2.length || (i < a1.length && a1[i] < a2[j])
  34.         a[i+j] = a1[i]
  35.         i += 1
  36.       else
  37.         a[i+j] = a2[j]
  38.         j += 1
  39.       end
  40.     end
  41.   end
  42. end
  43.  
  44. #---minitest---
  45.  
  46. describe Algo do
  47.   before do
  48.     @algo = Algo.new
  49.   end
  50.  
  51.   describe "merge sort" do
  52.     it "sort an array" do
  53.       arr = [3, 2, 1]
  54.       sorted_arr = @algo.merge_sort(arr)
  55.       assert_equal [1,2,3], sorted_arr
  56.     end
  57.   end
  58. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement