算法第二章作业

一、寻找第k小数的分治算法
1.partition划分
选择第一个元素作为基准
从第二个数起,从左到右寻找比基准大的数,从右到左寻找比基准小的数
将所有比基准小的数移到左侧,比基准大的数移到右侧
将基准移到中间
2.find寻找
计算基准是第几位数,如果基准数的位次count等于k,那么基准数就是要寻找的数;如果count大于k,那么在基准数的左半部分递归查找第k小数;如果count小于k,那么在基准数的右半部分递归查找第(k-count)小数
二、分析最好和最坏时间复杂度
1.最好:O(n)
在每次划分都能将数组平均分为两半,T(n)=T(n/2)+O(n)
2.最坏:O(n^2)
每次划分都只能减少一个元素(基准数最大或最小),T(n)=T(n-1)+O(n)
三、体会和思考
分治法就是将一个复杂的大问题拆分成一个个小问题,分解问题->解决子问题->合并问题,这种大事化小小事化了的思路也可以运用到日常生活遇到的问题中。
将复杂问题转化为简单问题递归分析,不仅思路明晰,在代码的实现上也更为简洁。

posted @ 2025-11-02 23:52  Amurin  阅读(3)  评论(0)    收藏  举报