分治法
- 借鉴快排划分思想进行分治查找:
①选取基准pivot,通过划分操作将数组划分,得到基准元素最终位置pos;
②若pos等于k,该元素就是第k小数,直接返回;
③若pos>k,则在左半区间递归查找第k小;若pos<k,则在右半区间递归查找第k-pos-1小;
④不断缩小搜索区间直至找到结果。 - 最好时间复杂度O(n):每次划分均衡,递归式T(n)=T(n/2)+O(n),复杂度线性。
最坏时间复杂度O(n^2):每次选到极值作为基准,划分极不均衡,递归式T(n)=T(n-1)+O(n)。 - 分治法核心是把大问题拆成同类型小规模子问题,求解子问题再得到原问题解。
本题和快排不同,不需要两边子问题都递归,按需只递归一侧,减少开销。分治算法效率受划分效果影响很大,可以通过随机选基准降低最坏情况概率。分治思路清晰,是处理大规模问题非常有效的思想。
浙公网安备 33010602011771号