From f9893a08eaee1f27996c1b93c2dcb3ff23b2ce27 Mon Sep 17 00:00:00 2001 From: krahets Date: Thu, 30 Mar 2023 02:30:58 +0800 Subject: [PATCH] build --- chapter_sorting/bucket_sort.md | 57 ++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/chapter_sorting/bucket_sort.md b/chapter_sorting/bucket_sort.md index 6bd4c7f5f..e5f4b3e9a 100644 --- a/chapter_sorting/bucket_sort.md +++ b/chapter_sorting/bucket_sort.md @@ -68,7 +68,35 @@ comments: true === "Go" ```go title="bucket_sort.go" - [class]{}-[func]{bucketSort} + /* 桶排序 */ + func bucketSort(nums []float64) { + // 初始化 k = n/2 个桶,预期向每个桶分配 2 个元素 + k := len(nums) / 2 + buckets := make([][]float64, k) + for i := 0; i < k; i++ { + buckets[i] = make([]float64, 0) + } + // 1. 将数组元素分配到各个桶中 + for _, num := range nums { + // 输入数据范围 [0, 1),使用 num * k 映射到索引范围 [0, k-1] + i := int(num) * k + // 将 num 添加进桶 i + buckets[i] = append(buckets[i], num) + } + // 2. 对各个桶执行排序 + for i := 0; i < k; i++ { + // 使用内置切片排序函数,也可以替换成其它排序算法 + sort.Float64s(buckets[i]) + } + // 3. 遍历桶合并结果 + i := 0 + for _, bucket := range buckets { + for _, num := range bucket { + nums[i] = num + i++ + } + } + } ``` === "JavaScript" @@ -98,7 +126,32 @@ comments: true === "Swift" ```swift title="bucket_sort.swift" - [class]{}-[func]{bucketSort} + /* 桶排序 */ + func bucketSort(nums: inout [Double]) { + // 初始化 k = n/2 个桶,预期向每个桶分配 2 个元素 + let k = nums.count / 2 + var buckets = (0 ..< k).map { _ in [Double]() } + // 1. 将数组元素分配到各个桶中 + for num in nums { + // 输入数据范围 [0, 1),使用 num * k 映射到索引范围 [0, k-1] + let i = Int(num) * k + // 将 num 添加进桶 i + buckets[i].append(num) + } + // 2. 对各个桶执行排序 + for i in buckets.indices { + // 使用内置排序函数,也可以替换成其它排序算法 + buckets[i].sort() + } + // 3. 遍历桶合并结果 + var i = nums.startIndex + for bucket in buckets { + for num in bucket { + nums[i] = num + nums.formIndex(after: &i) + } + } + } ``` === "Zig"