1.随机选择数组中的一个元素作为基准值,将数组划分为三部分:小于基准值的元素(左子数组)、等于基准值的元素(中间部分)、大于基准值的元素(右子数组)。若左子数组的长度 ≥ k,则第 k小的元素一定在左子数组中,递归处理左子数组;若左子数组长度 < k 且 左子数组长度 + 中间部分长度 ≥ k,则基准值就是第k小的元素;否则, k小的元素在右子数组中,递归处理右子数组,此时 k 需更新为 k - 左子数组长度 - 中间部分长度。当子数组长度为 1 时,直接返回该元素。
2.最好时间复杂度:O(n)。每次划分时,基准值恰好将数组分为大小均衡的两部分,递归深度为O(logn),每层处理的元素总数为O(n),因此总时间为O(n);
最坏时间复杂度:O(n²)。若每次划分选择的基准值是当前子数组中的最大或最小元素,会导致子数组规模仅减少1,此时递归深度为O(n),每层处理O(n)个元素,总时间为O(n²)。
3.分治法核心思想:分治法通过 “分解(将大问题拆分为相似子问题)→ 解决(递归处理子问题)→ 合并(子问题结果整合为原问题解)” 三步,将复杂问题简化。其关键在于子问题与原问题的相似性,以及划分后子问题规模的显著减小。分治法能有效降低问题复杂度,尤其适用于可均匀划分的问题,如快速排序、归并排序、二分查找,此时时间复杂度可从O(n²)降至 O(nlogn)或O(logn)。适合并行计算,子问题可独立处理。