QuickSort 递归实现易栈溢出,Go 中常见切片分段递归+append拼接的写法效率低且不安全,应改用原地分区与尾递归优化或迭代实现。

QuickSort 的递归实现容易栈溢出,别直接照抄示例
Go 里写 QuickSort,网上很多示例用切片分段递归再 append 拼接,比如:
append
- 用
arr[left:right]视图传参,不复制数据 - pivot 选中位数或随机索引,避免最坏退化
- 递归调用只保留一个分支(如先排左半区,右半区用 for 循环迭代处理)
BinarySearch 要求输入必须有序,但没人帮你校验
几乎所有 Go 版 BinarySearch 实现都假设输入已升序排列,例如:
arr
- 开发期加断言:用
sort.IsSorted(sort.IntSlice(arr))快速校验(仅 debug 构建启用) - 生产环境若无法保证有序,直接改用
sort.SearchInts(标准库函数,内部带有序性假设,但文档明确警告行为未定义) - 更稳妥的方案是先
sort.Ints(arr)再查,但得权衡排序开销 vs 查找频次
fibonacci 迭代版比递归版快百倍,但要注意整数溢出边界
递归写法 fibonacci(n int) int { if n 看似简洁,时间复杂度是 <code>O(2^n),算 f(40) 就明显卡顿。
迭代版没问题:
int
-
if arr == nil { return nil }(保持语义一致) - 或统一用
if len(arr) == 0 { return arr },因为len(nil) == 0,且多数标准库函数也按此约定
这点在单元测试里常被忽略,一上生产遇到空请求参数就崩。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











