剑指offer40.最小的k个数,基于快速选排思想
前言
排序可以很快的解决这个问题,但是这样的话时间复杂度为o(nlogn),这样的话并不理想。
快排的思想可以很轻松的解决这个问题,但需要注意的是,这个方法的并不是很稳定,也就是运气型算法,这个算法时间复杂度期望是o(n)
一、什么是快速选排思想
简单来说,快排的思想就是在执行之后,将它放在它应在的位置上,同时这个位置的左侧所有数全部小于等于它,右面的所有数都大于等于它,当然也可时右侧的数都大于它,只需要稍微动一下判断条件就可以了。
二、简单写法
1.不严谨的快速选排
代码如下(示例):
class Solution {
public:
int partition(vector<int> &arr, int start, int end) {
int pivot = arr[start], l = start, r = end;
while (l < r) {
while (l < r && arr[