题目链接:https://leetcode-cn.com/problems/smallest-k-lcci/
题意:计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
方法一: 利用快排思想,找到最小的前k个元素
class Solution {
private:
vector<int> quick_sort(vector<int>& arr, int k,int l,int r)//数组,k值,左侧坐标,右侧坐标
{
int i = l,j = r;//左右侧
while(i<j)
{
while(i<j&&arr[j]>=arr[l]) j--;//假如arr[j]大于被作为左侧基准的数,j就从右往左走
while(i<j&&arr[i]<=arr[l]) i++;//假如arr[i]小于被作为左侧基准的数,i就从左往右走
swap(arr[i],arr[j]);//更换对应的i,j将小于arr[l]的元素归位到左侧,大于的放到右侧
}
swap(arr[i],arr[l]);//更换最后一个arr[i]和arr[l],这个操作保证了原先的arr[l]变成了arr[i],这就保证了arr[l]左侧的元素都比他小,右侧的都比他大
if(i>k) return quick_so