-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathruby-merge_sort.rb
52 lines (41 loc) · 1.13 KB
/
ruby-merge_sort.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def merge_sort(array)
if array.length <= 1
return array
end
array_size = array.length
middle = (array.length / 2).round
left_side = array[0...middle]
right_side = array[middle...array_size]
sorted_left = merge_sort(left_side)
sorted_right = merge_sort(right_side)
merge(array, sorted_left, sorted_right)
return array
end
def merge(array, sorted_left, sorted_right)
left_size = sorted_left.length
right_size = sorted_right.length
array_pointer = 0
left_pointer = 0
right_pointer = 0
while left_pointer < left_size && right_pointer < right_size
if sorted_left[left_pointer] < sorted_right[right_pointer]
array[array_pointer] = sorted_left[left_pointer]
left_pointer+=1
else
array[array_pointer] = sorted_right[right_pointer]
right_pointer+=1
end
array_pointer+=1
end
while left_pointer < left_size
array[array_pointer] = sorted_left[left_pointer]
left_pointer+=1
array_pointer+=1
end
while right_pointer < right_size
array[array_pointer] = sorted_right[right_pointer]
right_pointer+=1
array_pointer+=1
end
return array
end