算法第二章实践作业
算法思路:
选一个基准 p,划分数组:左边 ≤ p,右边 > p。
若 p 最终位置为 i,左半部分加 p 的个数为 left = i - len + 1;
若 k == left,返回 A[i];
若 k < left,递归左半部分找第 k 小;
若 k > left,递归右半部分找第 k - left 小。
时间复杂度:
最好:每次划分均匀,T(n)=T(n/2)+O(n)=O(n);
最坏:每次 p 都是最大或最小,T(n)=T(n-1)+O(n)=O(n^2)。
体会:
分治法的关键是“划分”和“递归”。划分越均衡,效率越高;p 选得不好会退化到最坏情况。因此分治法中,子问题划分方式和最坏情况分析非常重要。
浙公网安备 33010602011771号