基数排序

来源:互联网 发布:nginx cc攻击怎么防御 编辑:程序博客网 时间:2024/06/05 01:16
int maxdigit(int arr[],int digit)
{
int *temp =new int[digit];
int m=0;
for(int i=0;i<digit;i++)
temp[i]=arr[i];
for(int i=0;i<digit;i++)
{


int k=1;
while((temp[i]/10)>0)
{
k++;
temp[i]/=10;
}
if(m<k) m=k;
}
delete[] temp;
return m;
}

void radixsort(int *arr,int digit)
{
int M=maxdigit(arr,digit);
int *B=new int[digit];
int *C=new int[10];
int radix=1;
for(int x=1;x<=M;x++)
{
for(int j=0;j<10;j++)
C[j]=0;
for(int i=0;i<digit;i++)
{
    int k= (arr[i]/radix)%10;
C[k]++;
}
for(int j=1;j<10;j++)
C[j]=C[j]+C[j-1];


for(int i=digit-1;i>=0;i--)
{
int k= (arr[i]/radix)%10;
B[C[k]-1]=arr[i];
    C[k]--;
}
radix*=10;
for(int j=0;j<=digit;j++)
arr[j]=B[j];
}
delete[] B;
delete[] C;
}
int main()
{
int array[]={22, 34, 95, 87, 56, 980, 12, 48,111};
radixsort(array,9);
for(int i=0;i<9;i++)
cout<<array[i]<<endl;
return 0;
}
0 0