Commit b0ff6f9
Changed files (2)
lib
sorting
spec
sorting
lib/sorting/merge_sort.rb
@@ -2,22 +2,15 @@ class MergeSort
def sort(items)
return items if items.size <= 1
pivot = items.size/2
- pivot += 1 unless items.size % 2 == 0
- split = items.each_slice(pivot).to_a
- merge(sort(split[0]), sort(split[1]))
+ left, right = items[0...pivot], items[pivot...items.size]
+ merge(sort(left), sort(right))
end
private
def merge(left, right)
result = []
- until left.empty? || right.empty? do
- if (left.first <=> right.first) == -1
- result << left.shift
- else
- result << right.shift
- end
- end
+ result << ((left.first <=> right.first) == -1 ? left.shift : right.shift) until left.empty? || right.empty?
result + left + right
end
end
spec/sorting/merge_sort_spec.rb
@@ -12,11 +12,9 @@ describe MergeSort do
end
it "should sort an array of numbers" do
- n = 600
+ n = 601
numbers = Array.new(n) { rand(n) }
sorted_numbers = numbers.sort
- Benchmark.bmbm do |x|
- x.report("merge sort") { sut.sort(numbers).should == sorted_numbers }
- end
+ sut.sort(numbers).should == sorted_numbers
end
end