分治算法求解第 k 小元素

1.找第 k 小的数的分治算法描述
先挑一个元素当基准,把数组划分开,小于基准的放左边,大于基准的放右边。看基准现在所在的位置:
如果这个位置刚好就是第 k 小,直接得到答案;如果目标在左边,就只在左边这段继续划分查找;如果目标在右边,就去右边区间继续找,同时调整 k 的值。不断缩小查找范围,重复划分操作,直到找到目标元素。

2.时间复杂度
最好时间复杂度:O (n)。每次选的基准刚好把数组对半分开,每次只需要处理一半区间,总的工作量是线性的。
最坏时间复杂度:O (n^2)。每次都不巧选到区间里最大或最小的数,每次划分只能去掉一个元素,工作量会变成平方级别。

3.对分治法的体会思考
分治是把一个大问题拆成几个同类的小问题,逐个解决,再合并子问题得到结果。这个找第 k 小的算法就很典型,不用把整个数组全部排好序,只需要处理半边区间,省下很多多余计算。不过算法好不好,很大程度看基准选得怎么样。分治一般用递归写,思路直观易懂,核心就是不断缩小问题规模,减少不必要的运算,以此提高效率。

posted @ 2026-10-09 23:37  许程程  阅读(8)  评论(0)    收藏  举报