堆排序
#include<stdio.h> int n,k,len; void HeapAdjust(int a[],int s,int m) { int j; int e=a[s]; for(j=2*s;j<=m;j*=2) { if(j<m&&a[j]<a[j])++j; if(e>=a[j])break; a[s]=a[j]; s=j; } a[s]=e; } void HeapSort(int a[]) { int i,e; for(i=len/2;i>0;i--) HeapAdjust(a,i,len); for(i=len;i>1;i--) { e=a[1]; a[1]=a[i]; a[i]=e; HeapAdjust(a,1,i-1); } } main() { while(~scanf("%d%d",&n,&k)) { len=k+1; int a[len]; for(int i=0;i<len;i++)scanf("%d",&a[i]); HeapSort(a); for(int i=0;i<n-len;i++)scanf("%d",&a[k]),HeapSort(a); for(int i=0;i<len;i++)printf("%d ",a[i]); } }