1.实践题目名称:找第k小的数
2.问题描述:设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数。
3.算法描述:用快速排序的思路,每一趟的用来划分的数在排列后的位置就是最后结果中的位置,即为数组中其下标为+1小的数(数组从0开始),若其数组下标+1小于k,则第k小的数在其右边,对右边使用递归算法,其数组下标+1大于k,则第k小的数在其左边,对左边使用递归算法。
4、算法时间及空间复杂度分析:
时间复杂度:运用了分治法和快速排序法。用数组中的元素x对数组进行划分,分成左右两个区域,判断x是否为第k小的数,若是,则输出,若不是继续划分查找,平均时间复杂度则为O(n)
空间复杂度:find函数运用了递归,空间复杂度为O(logn)。
5.心得体会:对一直没有思路的递归算法有了系统的了解,明白了“三部曲”:分解、递归求解、合并。
原文:https://www.cnblogs.com/chenweicong/p/13765207.html