Skip to content

Commit df67120

Browse files
committed
Refactor specs and merge sort code.
1 parent 3918bb0 commit df67120

File tree

4 files changed

+51
-32
lines changed

4 files changed

+51
-32
lines changed

lib/Algorithm-Sorting/merge_sort.rb

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
11
# Best case: Omega(nlog(n))
22
# Worst case: O(nlog(n))
33

4-
values = [5,2,4,7,1,3,6]
5-
6-
def merge(left, right)
7-
result = []
8-
i, j = 0, 0
9-
while(i < left.size && j < right.size)
10-
if(left[i] < right[j])
11-
result.push(left[i])
12-
i += 1
13-
else
14-
result.push(right[j])
15-
j += 1
4+
class MergeSort
5+
class << self
6+
def merge(left, right)
7+
result = []
8+
i, j = 0, 0
9+
while(i < left.size && j < right.size)
10+
if(left[i] < right[j])
11+
result.push(left[i])
12+
i += 1
13+
else
14+
result.push(right[j])
15+
j += 1
16+
end
17+
end
18+
return result + left[i..-1] + right[j..-1]
1619
end
17-
end
18-
return result + left[i..-1] + right[j..-1]
19-
end
2020

21-
def merge_sort(arr)
22-
if(arr.size == 1)
23-
return arr
24-
end
25-
len = arr.size
26-
mid = len/2
27-
start = 0
21+
def recursive(arr)
22+
return arr if(arr.size == 1)
2823

29-
return merge(
30-
merge_sort(arr[start...mid]),
31-
merge_sort(arr[mid...len])
32-
)
33-
end
24+
len = arr.size
25+
mid = len/2
26+
start = 0
3427

35-
p values
36-
p merge_sort(values)
28+
return merge(
29+
recursive(arr[start...mid]),
30+
recursive(arr[mid...len])
31+
)
32+
end
33+
end
34+
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require_relative './shared_example.rb'
2+
require_relative '../../lib/Algorithm-Sorting/merge_sort.rb'
3+
4+
describe MergeSort do
5+
let(:values) { [5,2,4,7,1,3,6] }
6+
7+
include_examples "recursive"
8+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
require_relative './shared_example.rb'
2+
require_relative '../../lib/Algorithm-Sorting/quick_sort.rb'
3+
4+
describe QuickSort do
5+
include_examples "sorting"
6+
end
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1-
shared_examples "sorting" do
2-
let(:values) { [5,2,4,7,1,3,6] }
3-
1+
shared_examples "recursive" do
42
describe '#recursive' do
53
it 'sort using recursive technique' do
64
expect(described_class.recursive(values)).to eq([1,2,3,4,5,6,7])
75
end
86
end
7+
end
98

9+
shared_examples "non_recursive" do
1010
describe '#non_recursive' do
1111
it 'sort using non-recursive technique' do
1212
expect(described_class.non_recursive(values)).to eq([1,2,3,4,5,6,7])
1313
end
1414
end
1515
end
16+
17+
shared_examples "sorting" do
18+
let(:values) { [5,2,4,7,1,3,6] }
19+
20+
include_examples "recursive"
21+
include_examples "recursive"
22+
end

0 commit comments

Comments
 (0)