题解 | 输入n个整数,输出其中最小的k个

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

void sort(vector<int>& a, int left, int right) {
    int i, j, temp, base;
    base = a[left];
    if (left >= right) return;  //分割点一边剩一个数或者没有数的时候直接返回,也可以通过left>right
    i = left;                       //来判断,相当于当left=right时什么都不执行,再来一遍后left>right
    j = right;                      //还是一样的结果。不过基于人的思考方式和尽量减少步骤可以直接用≥判断
    while (i < j) {
        while (i < j && a[j] >= base) {     //判断条件必须都加等于或者其中一个等于,否则出现多个
            j--;                            //相同数据时可能会卡住动不了无限循环
        }
        while (i < j && a[i] <= base) {
            i++;
        }
        temp = a[i];        //交换操作
        a[i] = a[j];
        a[j] = temp;
    }
    a[left] = a[i];         //基准位置和分割点交换
    a[i] = base;

    sort(a, left, i - 1);
    sort(a, i + 1, right);
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> num(n);
    for (int i = 0; i < n; i++) {
        cin >> num[i];
    }
    sort(num, 0, num.size() - 1);

    for (int x : num) {
        if (!k) break;
        cout << x << ' ';
        k--;
    }

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

10-20 11:11
辽宁大学 营销
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务