这个算法解决问题一般是选取一个序列的第k小哥元素,那么我们很容易想到,当我们将n个数排序好以后,那么排在第k个位置的即为我们要找的元素。
通过算法学家们的研究,可以很巧妙的做到即使是最坏情况下,依然可以再线性时间内完成。
这种方法的步骤是:
1.将这n个每5个一组,不够5个的剩下的元素再组成一组。
2.取出每一组的中位数,采取任意排序方法,进行排序。
3.递归调用函数查找上一步中的所有中位数的中位数,设为x。
4.用x来分割数组,设小于x的个数为k,大于x的个数n-k。
5.若i与x相等,那么返回x;若i小于k,那么在小于x的元素中继续递归查找,否则反之。
6.当n等于1时,我们终止算法,返回元素即为所求。
依据我们的步骤,很轻易就写出代码了。