剑指40:最小k个数

本文介绍了一种名为Solution的类,其中包含用于获取数组中最小k个数的getLeastNumbers函数,通过快速排序算法对输入数组进行排序,然后选取前k个元素。quicksort函数实现了经典的快速排序算法,用于对整数数组进行递归划分。
摘要由CSDN通过智能技术生成
class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        quicksort(arr,0,arr.size()-1);
        vector<int> res;
        res.assign(arr.begin(),arr.begin()+k);//assign实现不同容器赋值
        return res;
    }

    void quicksort(vector<int>& arr,int l,int r){
        if (l >= r) return;//当长度为1就不排序了
        int i=l;
        int j=r;
        int pivot=arr[l];//以最左边的数为基准
        while(i<j){
            while(i<j && arr[j]>=pivot) j--;//从右往左找小于基准的数
            while(i<j && arr[i]<=pivot) i++;//从左往右找大于基准的数
            swap(arr[i],arr[j]);
            //调换位置,小的在左边,大的在右边,此时小的之间未排序
        }
        swap(arr[i],arr[l]); //将基准值放到小值的最右边,即小值和大值的中间
        quicksort(arr,l,i-1);
        quicksort(arr,i+1,r);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值