def quick_sort(a) |
(x=a.pop) ? quick_sort(a.select{|i| i <= x}) + [x] + quick_sort(a.select{|i| i > x}) : [] |
end |
def first_number(n) |
(n * 10 ).to_i |
end |
def bucket_sort(a) |
tmp = [] |
( 0 .. 9 ). each do |j| |
tmp[j] = [] |
end |
|
a. each do |n| |
k = first_number(n) |
tmp[k] << n |
end |
( 0 .. 9 ). each do |j| |
tmp[j] = quick_sort(tmp[j]) |
end |
tmp.flatten |
end |
a = [ 0 . 75 , 0 . 13 , 0 , 0 . 44 , 0 . 55 , 0 . 01 , 0 . 98 , 0 . 1234567 ] |
p bucket_sort(a) |
# Result: |
[ 0 , 0 . 01 , 0 . 1234567 , 0 . 13 , 0 . 44 , 0 . 55 , 0 . 75 , 0 . 98 ] |