voidCountSort(int*a,intn){assert(a);intminValue=a[0];intmaxValue=a[0];for(inti=0;i<n;++i){if(minValue>a[i]){minValue=a[i];}if(maxValue<a[i]){maxValue=a[i];}}intrange=maxValue-minValue+1;int*tmp=newint[range];memset(tmp,0,sizeof(int)*range);intindex=0;while(index<n){tmp[a[index]-minValue]++;++index;}index=0;for(inti=0;i<range;++i){while(tmp[i]--){a[index++]=i+minValue;}}delete[]tmp;}