基础算法 838.堆排序

堆排序中,最主要的是这个down()函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
using namespace std;
 
const int N = 100010;
int h[N], cnt;
 
void down( int k ){
    int t = k;
    if(k * 2 <= cnt && h[k * 2] < h[t]) t = k * 2;
    if(k * 2 + 1 <= cnt && h[k * 2 + 1] < h[t]) t = k * 2 + 1;
     
    if( k != t){
        swap(h[t], h[k]);
        down(t);
    }
}
 
int main(){
    int n, m;
    cin>>n>>m;
    cnt = n;
    for(int i = 1; i <= n; i ++) cin >> h[i];
     
    for(int i = n / 2; i ; i --) down (i);
     
    while(m--){
        cout<<h[1]<<" ";
        h[1] = h[cnt --];
        down(1);
    }
    return 0;
}

  

posted @   bz-2021  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示