Skip to content

Commit

Permalink
feat: add ruby code block - bucket sort (#1285)
Browse files Browse the repository at this point in the history
* feat: add ruby code block - bucket sort

* Update codes/ruby/chapter_sorting/bucket_sort.rb

Co-authored-by: khoaxuantu <[email protected]>

* Update codes/ruby/chapter_sorting/bucket_sort.rb

Co-authored-by: khoaxuantu <[email protected]>

* Update bucket_sort.rb

---------

Co-authored-by: khoaxuantu <[email protected]>
Co-authored-by: Yudong Jin <[email protected]>
  • Loading branch information
3 people authored Apr 30, 2024
1 parent 84bb115 commit 59d0726
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions codes/ruby/chapter_sorting/bucket_sort.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
=begin
File: bucket_sort.rb
Created Time: 2024-04-17
Author: Martin Xu ([email protected])
=end

### 桶排序 ###
def bucket_sort(nums)
# 初始化 k = n/2 个桶,预期向每个桶分配 2 个元素
k = nums.length / 2
buckets = Array.new(k) { [] }

# 1. 将数组元素分配到各个桶中
nums.each do |num|
# 输入数据范围为 [0, 1),使用 num * k 映射到索引范围 [0, k-1]
i = (num * k).to_i
# 将 num 添加进桶 i
buckets[i] << num
end

# 2. 对各个桶执行排序
buckets.each do |bucket|
# 使用内置排序函数,也可以替换成其他排序算法
bucket.sort!
end

# 3. 遍历桶合并结果
i = 0
buckets.each do |bucket|
bucket.each do |num|
nums[i] = num
i += 1
end
end
end

### Driver Code ###
if __FILE__ == $0
# 设输入数据为浮点数,范围为 [0, 1)
nums = [0.49, 0.96, 0.82, 0.09, 0.57, 0.43, 0.91, 0.75, 0.15, 0.37]
bucket_sort(nums)
puts "桶排序完成后 nums = #{nums}"
end

0 comments on commit 59d0726

Please sign in to comment.