From 8c21d4b578bb198f9b088a7a8566835685614ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C8=98tefan-Iulian=20Alecu?= <165364995+pascalecu@users.noreply.github.com> Date: Wed, 13 May 2026 22:38:28 +0300 Subject: [PATCH] Add Quick Sort in Ruby --- archive/r/ruby/quick-sort.rb | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 archive/r/ruby/quick-sort.rb diff --git a/archive/r/ruby/quick-sort.rb b/archive/r/ruby/quick-sort.rb new file mode 100644 index 000000000..595a1f99f --- /dev/null +++ b/archive/r/ruby/quick-sort.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +def usage! + abort %(Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5") +end + +def parse_input + raw = ARGV.first + usage! if raw.nil? || raw.strip.empty? + + numbers = raw.split(",").map { Integer(it.strip) } + usage! if numbers.length < 2 + + numbers +rescue ArgumentError, NoMethodError + usage! +end + +def quicksort!(arr, lo = 0, hi = arr.length - 1) + return arr if lo >= hi + + p = partition(arr, lo, hi) + + quicksort!(arr, lo, p - 1) + quicksort!(arr, p + 1, hi) + + arr +end + +def partition(arr, lo, hi) + pivot = arr[hi] + i = lo + + (lo...hi).each do |j| + if arr[j] <= pivot + arr[i], arr[j] = arr[j], arr[i] + i += 1 + end + end + + arr[i], arr[hi] = arr[hi], arr[i] + i +end + +numbers = parse_input +puts quicksort!(numbers).join(", ")