nth_element
实际上寻找第n个element分为两个部分。
第一个部分是寻找第n大的数,不过时间复杂度最优是on,最劣是ologn。
方法就是:
在快速排序的每一次迭代中,都会分出3段,分别是小于,等于和大于,然后看第k大的数在哪一段然后继续迭代即可。
第二个部分就是如何将这个复杂度优化到on,主要内容是寻找近似中位数。
快速排序的复杂度大部分取决于pivot的选取,因此最好选出一个靠近中位数的数。
方法就是将其进行分组,对于每个组选出一个中位数,然后对于这些中位数组成的新的数组,继续分组,选中位数,进行迭代,一般情况下是5个一组。
这样的优化下能on时间下求出一个近似的中位数。
nth_element
https://lhish.github.io/project/hide/nth_element/