#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//快速排序算法,一个是递归,一个就是之前的分割算法
void Quick_sort(int a[],int high,int low);
int split(int a[],int high,int low);
void Quick_sort(int a[],int high,int low)
{
int mid;
if(low>=high) return;
mid=split(a,high,low);
Quick_sort(a,mid-1,low);
Quick_sort(a,high,mid+1);
}
int split(int a[],int high,int low)
{
int part_element=a[low];
for(;;)
{
while(a[high]>=part_element&&low<high)
high--;
if(low>=high) break;
a[low++]=a[high];
while(a[low]<=part_element&&low<high)
low++;
if(low>=high) break;
a[high--]=a[low];
}
a[high]=part_element;
return high;
}
void Count_sort(int a[],int b[],int k,int n)
//k是范围,n是个数,b数组是排序好的数组
{
int c[1000]={0};
for(int i=0;i<n;i++)
c[a[i]]++;//计数就是在对应数组标号是计数
for(int j=1;j<=k;j++)
c[j]=c[j]+c[j-1];//每个元素计的是之前c数组元素之和,也就是a[]的个数
//这样c数组存储的变量也有了大小,可以直接当记号
for(int i=n-1;i>=0;i--)
{
b[c[a[i]]-1]=a[i];
c[a[i]]--;//这个语句针对有重复数字的情况
}
}
int main(void)
{
int len = 0, num;
int a[100] = { 0 };
int b[100] = { 0 };
while (1)
{
scanf("%d", &num);
a[len++] = num;
if (getchar() == '\n') break;
}
Count_sort(a, b, 1000, len);
for (int i = 0; i < len; i++) printf("%d ", b[i]);
}