diff --git a/04_quicksort/ruby/01_loop_sum.rb b/04_quicksort/ruby/01_loop_sum.rb new file mode 100644 index 0000000..27866af --- /dev/null +++ b/04_quicksort/ruby/01_loop_sum.rb @@ -0,0 +1,10 @@ +def sum(arr) + total = 0 + arr.each do |x| + total += x + end + + total +end + +puts sum([1, 2, 3, 4]) diff --git a/04_quicksort/ruby/02_recursive_sum.rb b/04_quicksort/ruby/02_recursive_sum.rb new file mode 100644 index 0000000..926b7ff --- /dev/null +++ b/04_quicksort/ruby/02_recursive_sum.rb @@ -0,0 +1,4 @@ +def sum(list) + return 0 if list.empty? + list[0] + sum(list[1..-1]) +end diff --git a/04_quicksort/ruby/03_recursive_count.rb b/04_quicksort/ruby/03_recursive_count.rb new file mode 100644 index 0000000..d159353 --- /dev/null +++ b/04_quicksort/ruby/03_recursive_count.rb @@ -0,0 +1,4 @@ +def count(list) + return 0 if list.empty? + 1 + count(list[1..-1]) +end diff --git a/04_quicksort/ruby/04_recursive_max.rb b/04_quicksort/ruby/04_recursive_max.rb new file mode 100644 index 0000000..59e7d94 --- /dev/null +++ b/04_quicksort/ruby/04_recursive_max.rb @@ -0,0 +1,9 @@ +def max(list) + if list.length == 2 + # condition ? then : else + list[0] > list[1] ? list[0] : list[1] + else + sub_max = max(list[1..-1]) + list[0] > sub_max ? list[0] : sub_max + end +end diff --git a/04_quicksort/ruby/05_quicksort.rb b/04_quicksort/ruby/05_quicksort.rb new file mode 100644 index 0000000..0fb614f --- /dev/null +++ b/04_quicksort/ruby/05_quicksort.rb @@ -0,0 +1,18 @@ +def quicksort(array) + if array.length < 2 + # base case, arrays with 0 or 1 element are already "sorted" + array + else + # recursive case + pivot = array[0] + # sub-array of all the elements less than the pivot + rest = array[1..-1] + less = rest.select { |i| i <= pivot } + # sub-array of all the elements greater than the pivot + greater = rest.select { |i| i > pivot } + + quicksort(less) + [pivot] + quicksort(greater) + end +end + +print quicksort([10, 5, 2, 3])