void Q(unsigned *a, int s,int t){
int i=s,j=t;
unsigned tmp, m=a[(i+j)>>1];//m=a[s+rand()*rand()%(t-s+1)];
do {
while (a[i]<m) ++i;
while (a[j]>m) --j;
if (i<=j){
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
++i; --j;
}
}while (i<=j);
if (i<t) Q(a,i,t);
if (s<j) Q(a,s,j);
}
void sort(unsigned *a, int n){
Q(a, 0, n-1);
}