template<class Record>
void RadixSort(Record Array[],int n,int d,int r){//n数组长度,d为排序码个数,r为基
Record * TempArray=new Record[n];
int * count=new int[r];
int i,j,k;
int Radix=1;
for(i=1;i<=d;i++){
for(j=0;j<r;j++)
count[j]=0;
for(j=0;j<r;j++){
k=(Array[j]/Radix)%r;
count[k]++;
}
for(j=1;j<r;j++)
count[j]+=count[j-1];
for(j=n-1;j>=0;j--){
k=(Array[j]/Radix)%r;
count[k]--;
TempArray[count[k]]=Array[j];
}
for(j=0;j<n;j++)
Array[j]=TempArray[j];
Radix*=r;
}
delete[]TempArray[];
delete[]count;
}
网友评论