第二章实践作业
1.先从数组中选择一个元素作为基准,例如选择中间元素。然后将数组重新排列,使得所有小于基准的元素都在基准左边,所有大于基准的元素都在基准右边。划分完成后,基准元素处于其最终排序后的位置,假设其下标为p,如果k=p+1,那么基准就是第k小的数,直接返回。如果k<=p,则在左侧子数组中递归寻找第k小的数。如果k>=p+1,则在右侧子数组中递归寻找第k-(p+1)小的数。
2.最好的时间复杂度:在最好的情况下,每次划分都能将数组大致平分为两部分。此时,每次递归处理的子问题规模约为子问题的一半。递推关系为T(n)=T(n/2)+O(n)。
最坏时间复杂度:在最坏情况下,每次选取的基准都是当前子数组的最小或最大元素。此时,划分后一边子数组为空,另一组子数组规模为n-1。递推关系为:T(n)=T(n-1)+O(n)。
3. 分治法的体会和思考:分治法的三个步骤:分解,将原问题分解为若干个子问题,这些子问题是原问题的缩小版。解决,递归地解决子问题规模足够小,则直接求解。合并,将子问题的解合并为原问题的解。
浙公网安备 33010602011771号