mirror of
https://github.com/TheAlgorithms/Ruby
synced 2024-12-26 21:58:56 +01:00
25 lines
720 B
Ruby
25 lines
720 B
Ruby
# This is a pure ruby implementation of the radix sort algorithm
|
|
# the function returns collection ordered by ascending
|
|
# Example:
|
|
# pry(main)> radix_sort([6, 22, 43, 16, 0, 15, 9])
|
|
# => [0, 6, 9, 15, 16, 22, 43]
|
|
|
|
def radix_sort(array, base = 10)
|
|
# passes count equals to the number of digits in the longest number
|
|
passes = (Math.log(array.minmax.map(&:abs).max) / Math.log(base)).floor + 1
|
|
passes.times do |i|
|
|
buckets = Array.new(2 * base) { [] }
|
|
base_i = base**i
|
|
|
|
# elements are added to buckets
|
|
# according to the current place-value digit
|
|
array.each do |j|
|
|
n = (j / base_i) % base
|
|
n += base if j >= 0
|
|
buckets[n] << j
|
|
end
|
|
array = buckets.flatten
|
|
end
|
|
|
|
array
|
|
end
|