第二章作业

先在数组里选一个基准元素 p,然后把数组分成三部分:比 p 小的、等于 p 的、比 p 大的。假设这三部分的大小分别是 L、M、R。
如果 k ≤ L,说明第 k 小的数在左边那部分,就递归地在左边找第 k 小;
如果 L < k ≤ L + M,说明 p 就是答案,直接返回;
如果 k > L + M,说明答案在右边,就递归地在右边找第 k - L - M 小的数。

时间复杂度分析
最好情况:每次划分都能把数组大致分成两半,每次递归的规模大约是原来的一半,所以最好时间复杂度是 O(n)。
最坏情况:每次选的基准元素都是当前数组的最大值或最小值,导致一边为空,另一边只少一个元素,总时间复杂度是 O(n²)。

对分治法的体会
学完这一章,我觉得分治法的核心就是"分、治、合"三步。把一个复杂问题拆成几个规模更小的子问题,分别解决后再合并结果。像归并排序、快速排序、二分查找,本质上都是分治的思想。
分治法的优势在于能把 O(n²) 的问题优化到 O(n log n) 甚至 O(n),但关键在于怎么"分"。如果分得不均匀,效率就会大打折扣,就像上面找第 k 小数时 pivot 选不好就会退化。

posted @ 2026-10-07 15:32  LIN8814  阅读(4)  评论(0)    收藏  举报