堆排序

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define sc(n) scanf("%d",&n)
#define print(n) printf("%d\n",n)
#define endl "\n";
#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
const int N=1000001;
const int MOD = 1e9 + 7;
const int INF=1e9;
const double eps=1e-5;
int a[N],sum[N];
int n,m,k,cnt;

void down(int x){
    int t=x;
    if(x*2<=cnt&&a[x*2]<a[t]) t=x*2;
    if(x*2+1<=cnt&&a[x*2+1]<a[t]) t=x*2+1;//t改变最大值,所以比较要用t
    if(x!=t){
        swap(a[x],a[t]);
        down(t);
    }
}

int main(){
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);
    cnt = n;

    for (int i = n / 2; i; i -- ) down(i);

    while (m -- )
    {
        printf("%d ", a[1]);
        a[1] = a[cnt -- ];
        down(1);
    }

    puts("");

    return 0;
}
算法专题 文章被收录于专栏

怕忘记,好复习

全部评论

相关推荐

07-15 18:09
门头沟学院 Java
点赞 评论 收藏
分享
05-24 14:12
门头沟学院 Java
点赞 评论 收藏
分享
07-14 12:29
门头沟学院 Java
后端岗,实习三周感觉有点想跑路了,担心秋招被拉黑,有没有佬是字节HR知道情况的
从零开始的转码生活:你实习三周都想跑路,将来拿到offer真的愿意在这干十几二十年吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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