Я думаю, что проблема в вашем примере заключалась в том, что вам нужно было явно указать return
.
if self.length<=1
self[0]
return [] if self == []
и
less.quick_sort + self[0] + greater.quick_sort #line 29
должно было быть
less.quick_sort + [self[0]] + greater.quick_sort #line 29
Вот рабочий пример
class Array
def quick_sort
return [] if self == []
pivotal = self.shift;
less, greater = [], []
self.each do |x|
if x <= pivotal
less << x
else
greater << x
end
end
return less.quick_sort + [pivotal] + greater.quick_sort
end
end
[1,3,2,5,4].quick_sort # => [1, 2, 3, 4, 5]