Skip to content

Commit 99eeba1

Browse files
authored
fix: should fix the compilation problem?
1 parent 05d77d2 commit 99eeba1

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/content/blog/2025-08-04/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ arr = [170, 45, 75, 90, 802, 24, 2, 66]
4848
print("排序前 :", arr)
4949
print("排序后 :", radix_sort(arr))
5050
```
51-
代码解读:首先,在预处理阶段,`max_digits = len(str(max(arr)))` 计算数组中最大数字的位数,例如最大数 802 的位数为 3。在 LSD 循环中,变量 `digit` 表示当前处理的位索引(从 0 开始,0 为个位)。对于每个数字 `num``current_digit = (num // (10 ** digit)) % 10` 提取当前位数字:例如当 `digit=0` 时,170 的个位为 $(170 // 10^0) % 10 = 170 % 10 = 0$。元素被分配到 `buckets` 列表中,桶使用列表的列表实现,确保稳定性(相同当前位数字的元素保持原顺序)。收集操作 `arr = [num for bucket in buckets for num in bucket]` 通过列表推导式将所有桶中的元素扁平化回数组,保持桶内顺序。测试部分输出排序前后数组,验证算法正确性。
51+
代码解读:首先,在预处理阶段,`max_digits = len(str(max(arr)))` 计算数组中最大数字的位数,例如最大数 802 的位数为 3。在 LSD 循环中,变量 `digit` 表示当前处理的位索引(从 0 开始,0 为个位)。对于每个数字 `num``current_digit = (num // (10 ** digit)) % 10` 提取当前位数字:例如当 `digit=0` 时,170 的个位为 $(170 // 10^0) \% 10 = 170 \% 10 = 0$。元素被分配到 `buckets` 列表中,桶使用列表的列表实现,确保稳定性(相同当前位数字的元素保持原顺序)。收集操作 `arr = [num for bucket in buckets for num in bucket]` 通过列表推导式将所有桶中的元素扁平化回数组,保持桶内顺序。测试部分输出排序前后数组,验证算法正确性。
5252

5353
## 变体与优化
5454
基数排序有多个变体与优化方向。MSD(最高位优先)基数排序采用递归方式,先按最高位分桶,再对每个桶递归排序,适合字符串处理。在桶的实现上,可用链表代替动态数组以减少内存分配开销;尝试原地排序虽复杂但可能节省空间,但需牺牲稳定性。对于负数处理,可分离正负数分别排序,或通过添加偏移量(如加 1000)将负数转为正数处理后再排序,最后还原符号。

0 commit comments

Comments
 (0)