AcWing 838. 堆排序
原题链接
简单
作者:
孤独时代的罗永浩
,
2020-06-24 00:17:52
,
所有人可见
,
阅读 489
java 代码
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++)
arr[i]=sc.nextInt();
for(int i= n/2 - 1; i >= 0 ; i--)
adjustDownToUp(arr,i,n);
for(int i=n-1;i>0;i--){
int tmp=arr[i];
arr[i]=arr[0];
arr[0]=tmp;
adjustDownToUp(arr,0,i);
}
for(int i=0;i<m;i++)
System.out.print(arr[i]+" ");
}
private static void adjustDownToUp(int[] arr,int k,int length){
int tmp=arr[k];
for(int i = 2 * k + 1 ; i < length ;i = 2 * i + 1){
if(i+1<length && arr[i+1]>arr[i]) i++;
if(tmp>arr[i]) break;
else{
arr[k]=arr[i];
k=i;
}
}
arr[k]=tmp;
}
}