快速排序思想的经典变形--先找到数组的pivot,然后使用二分法进行递归找到数组中第K小的元素,算法时间复杂度与快排一样为O(nlogn);然后线性扫描原数组找到所有不大于它的元素,此步骤复杂度为O(n),因而算法总时间复杂度为O(nlogn) + O(n) = O(nlogn)。实现中需要注意边界条件,很容易写错导致程序死循环。以下是C++完整实现:
快速排序思想的经典变形--先找到数组的pivot,然后使用二分法进行递归找到数组中第K小的元素,算法时间复杂度与快排一样为O(nlogn);然后线性扫描原数组找到所有不大于它的元素,此步骤复杂度为O(n),因而算法总时间复杂度为O(nlogn) + O(n) = O(nlogn)。实现中需要注意边界条件,很容易写错导致程序死循环。以下是C++完整实现: