堆排序

#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]);
      }
}

 

posted on 2013-02-27 16:34  dokc  阅读(159)  评论(0编辑  收藏  举报

导航