我在某道题中使用如下基数排序代码:
unsigned long long tmp[maxm];
void sort(unsigned long long *st,unsigned long long *ed,unsigned long long n,unsigned int bit)
{
static int bu[1<<11];
memset(bu,0,sizeof(bu));
for(unsigned int i=0;i<n;i++)bu[(st[i]>>bit)&(0x7ff)]++;
for(unsigned int i=1;i<(1<<11);i++)bu[i]+=bu[i-1];
for(int i=n-1;i>=0;i--)ed[--bu[(st[i]>>bit)&0x7ff]]=st[i];
}
void sort(unsigned long long *st,int n)
{
sort(st,tmp,n,0);
sort(tmp,st,n,11);
sort(st,tmp,n,22);
memcpy(tmp,st,sizeof(long long)*(n+3));
}
其原意是将 st
中的 64 位无符号整数按后 33 位大小排序。但是它炸了(死因未明)。求助一下有没有什么解决方法。