基数排序

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值