#include <iostream>
using namespace std;

int main(){
  int a[]={2,3,5,2,3};
  int n=sizeof(a)/sizeof(int);
  int max=a[0];
  for (int i=1;i<n;i++) if (a[i]>max) max=a[i];
  int *temp=new int[max+1];
  int *output=new int[n];

  for (int i=0;i<n;i++) output[i]=0;
  for (int i=0;i<max+1;i++) temp[i]=0;

  for (int i=0;i<n;i++) ++temp[a[i]];

  /* Traditional way
  for (int i=1;i<max+1;i++) temp[i]+=temp[i-1];
  for (int i=n-1;i>=0;i--) {
    output[temp[a[i]]-1]=a[i];
    --temp[a[i]];
  }
  */

  // My way
  for (int i=0,k=0;i<max+1;i++) {
    while (temp[i]) {
      --temp[i];
      output[k++]=i;
    }
  }

  for (int i=0;i<n;i++) cout<<output[i]<<"  ";
  return 0;
}
