找第k小的数的分治算法以及对分冶法的思考和体会

1.分解(分):在当前数组区间选一个基准元素,通过划分,把区间分成两部分:左边所有元素≤基准,右边所有元素≥基准,得到基准所在位置。
2.判断:统计左侧元素数量:
如果左侧元素数量刚好等于 k:基准就是第 k 小,直接返回;
如果 k 更小:第 k 小在左子区间,只递归左区间;
如果 k 更大:第 k 小在右子区间,在右区间找 k-leftSize 小。
3.合并:本算法不需要合并,只要找到目标就返回。
最好时间复杂度O(n),最坏时间复杂度O(n^2)
分冶法是把一个大规模、难求解的原问题,拆成若干结构相同、规模更小的子问题;递归求解子问题,再把子问题结果合并,得到原问题解的解题方法。适用于原问题可以拆成同类型子问题;子问题独立,互不依赖;子问题规模缩小到一定程度,可以直接简单求解;子问题的解能够合并成原问题解。但是递归会带来函数调用栈开销;如果子问题划分不均衡,会退化到很高复杂度;子问题不独立时不适合分治。

posted @ 2026-10-07 19:17  敏zm  阅读(17)  评论(0)    收藏  举报