AcWing 838. 堆排序
原题链接
简单
作者:
Acvv_scl
,
2021-03-02 00:46:27
,
所有人可见
,
阅读 277
简而单之
import java.util.*;
public class Main{
static int N=100010;
static int []h=new int[N];
static int size;
static void down(int u){
int t=u;
if(2*u<=size&&h[2*u]<h[t])t=2*u;
if(2*u+1<=size&&h[2*u+1]<h[t])t=2*u+1;
if(u!=t){
int tmp=h[t];
h[t]=h[u];
h[u]=tmp;
down(t);
}
}
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
size=n;
int m=sc.nextInt();
for(int i=1;i<=n;i++){
h[i]=sc.nextInt();
}
for(int i=n/2;i!=0;i--){
down(i);
}
while(m-->0){
System.out.print(h[1]+" ");
h[1]=h[size--];
down(1);
}
}
}