#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKXsKICBpbnQgYVtdPXsyLDMsNSwyLDN9OwogIGludCBuPXNpemVvZihhKS9zaXplb2YoaW50KTsKICBpbnQgbWF4PWFbMF07CiAgZm9yIChpbnQgaT0xO2k8bjtpKyspIGlmIChhW2ldPm1heCkgbWF4PWFbaV07CiAgaW50ICp0ZW1wPW5ldyBpbnRbbWF4KzFdOwogIGludCAqb3V0cHV0PW5ldyBpbnRbbl07CgogIGZvciAoaW50IGk9MDtpPG47aSsrKSBvdXRwdXRbaV09MDsKICBmb3IgKGludCBpPTA7aTxtYXgrMTtpKyspIHRlbXBbaV09MDsKCiAgZm9yIChpbnQgaT0wO2k8bjtpKyspICsrdGVtcFthW2ldXTsKCiAgLyogVHJhZGl0aW9uYWwgd2F5CiAgZm9yIChpbnQgaT0xO2k8bWF4KzE7aSsrKSB0ZW1wW2ldKz10ZW1wW2ktMV07CiAgZm9yIChpbnQgaT1uLTE7aT49MDtpLS0pIHsKICAgIG91dHB1dFt0ZW1wW2FbaV1dLTFdPWFbaV07CiAgICAtLXRlbXBbYVtpXV07CiAgfQogICovCgogIC8vIE15IHdheQogIGZvciAoaW50IGk9MCxrPTA7aTxtYXgrMTtpKyspIHsKICAgIHdoaWxlICh0ZW1wW2ldKSB7CiAgICAgIC0tdGVtcFtpXTsKICAgICAgb3V0cHV0W2srK109aTsKICAgIH0KICB9CgogIGZvciAoaW50IGk9MDtpPG47aSsrKSBjb3V0PDxvdXRwdXRbaV08PCIgICI7CiAgcmV0dXJuIDA7Cn0K