1425 sort

来源:互联网 发布:cad手机画图软件 编辑:程序博客网 时间:2024/05/22 00:33
 #include<stdio.h>
#include<stdlib.h>
#include<memory.h>
void sort(int *p,int n,int a)
{
 int max,min,*q,i,temp,length,j;
 max=min=p[0];
 for(i=1;i<n;i++)
 {
  if(p[i]>max)
   max=p[i];
  else if(p[i]<min)
   min=p[i];
 }
 length=max-min+2;temp=min-1;
 q=(int*)calloc(length,sizeof(int));
 memset(q,0,sizeof(q));
 for(i=0;i<n;i++)
  q[p[i]-temp]+=1;
 j=0;
 i=length-1;
 while(i>=0)
 {
  if(j>=a)
   i=0;
  if(q[i]==1)
  {
   p[j]=i+temp;
   j+=1;
  }
  else if(q[i]>1)
  {
   while(q[i]--)
   {
    p[j]=i+temp;j+=1;
   }
  }
  i-=1;
 }
 free(q);
}
void main()
{
 void sort(int *p,int n,int a);
 int m,n,*p,i,temp;
 while(scanf("%ld%ld",&n,&m)!=EOF)
 {
  if(n>=1000000||n<=0||m>=1000000||m<=0)
   break;
  i=0;
  temp=n;
  p=(int*)calloc(n,sizeof(int));
  while(n--)
  {
   scanf("%ld",&p[i]);i+=1;
  }
  sort(p,temp,m);
  printf("%ld",p[0]);
  for(i=1;i<m;i++)
   printf(" %ld",p[i]);
  printf("/n");
 }
}