在乱序数组中寻找他第k位小的元素
1.将数组排序后选取第k位小元素 O(nlogn)
2.特定分治策略
图片来自https://www.jianshu.com/p/2759d3c21bd9
将数组每五个划分一组,最后一组如果不够就只有那些数,每组都是有序的 O(n) 为什么是五个五个分,这是算法设计者实验得出最佳的方法
用每组的中位数来进行组之间的排序,也就是在所有的中间值中,递归调用本算法(求的k位改为中间位),挑出中间值中的中间值mm。
按照mm对数组进行划分,比mm小,比mm大,和mm相同的,第k小元素在哪块区域 O(n)
对该区域再次递归调用本算法 当数组总数小于某个阈值的时候,可以直接用快速排序.
根据网上其他人博客的计算如下:
T(n) <= T(n/5) + T(7n/10 + 6) + O(n)
给出代码没有用到快速排序
https://github.com/zhangweifeng66/algorithms