NElement = 20
NRadix = 4
K = 5
arr = Array.new(NElement) do #初始化待排序数组,随机填写元素
Array.new(NRadix) do
rand(K)
end
end
def counting_sort(a,b,r,k)
c = Array.new(k + 1,0) #下标数组
a.each do |x|
c[x[r]] += 1 #计数
end
c.each_with_index do |x,i|
next if i == 0
c[i] += c[i - 1] #累计计数
end
a.reverse.each do |x|
function(){ //K线图 http://www.kaifx.cn/mt4/kaifx/1770.html
b[c[x[r]] - 1] = x #放置元素
c[x[r]] -= 1 #为相同输入挪动下标,这里是往前挪,所以在基数排序中多次排序需逆向输入元素
end
end
def radix_sort(a,r,k)
b = Array.new(a.size,nil)
(r - 1).downto 0 do |ri|
counting_sort(a,b,ri,k)
a = b
end
b
end