经典问题
有一道经典的算法题”Selection”
SELECTION
Input: A list of numbers S; an integer k
Output: The kth smallest element of S
For instance, if k = 1, the minimum of S is sought, whereas if k = |S|/2, it is the median.
这道题有很多解法,最简单的就是先对所有数排序。但是显然当数据较大时,这种方法效率不高。使用分治算法就可以在此基础上提高效率,因为只需对一部分而不是全部数据进行排序。
大致思路如下:每一次,先从数组中选出任意一个参考数pivot
。选取的方法几乎不会影响效率,一般来说随机选取即可。选取好pivot
后,对数组进行遍历,将所有数据分为三组,即小于,等于,大于pivot
的三组。例如:
若选取5作为参考数,则分成的三组为: