快速选择算法,就是从给定的一个集合S={a1,a2,...an}中选出第K个大小的数,或者给出其所在的下标之类的。
如果使用排序,然后返回第K个元素的下标,复杂度是O(NlogN)
如果使用quick sort的一个变种,叫 quick select,则平均复杂度为O(N),最坏复杂度为O(N^2)
如果使用一种线性选择算法,则可以达到最坏O(N)的复杂度,不过实际应用中,该算法通常比quick select慢1到2倍,所以并不常用(参考Blum, Floyd, Pratt, Rivest, and Tarjan 1973 Time bounds for selection)
这里实现了stl风格的quick select,仅仅作为一个mark