基数排序

int max_bit(int a[], int size)   

{   

    int max;   

    

    for (int i = 1, max = a[0]; i < size; i++) 

    {   

        if (a[i] > max)

        {   

            max = a[i];   

        }   

    }   

    int b = 1;   

    while (max / 10)

    {   

        b++;   

        max /= 10;   

    }   

    return b;   

}   


void radix_sort(int a[], int size)   

{   

    int d = max_bit(a, size);   

    int i, j, k;     

    

    int range = 10; 

    int radix = 1;   

    int *c = (int *)malloc(sizeof(int) * range);   

    int *b = (int *)malloc(sizeof(int) * size);   

    for(i = 0; i < d; i++, radix *= 10)

    {   

         

        for(j = 0; j < range; j++) 

        {    

            c[j] = 0;   

        }   

        

        for(j = 0; j < size; j++) 

        {    

            k = (a[j] / radix) % 10;   

            c[k]++;   

        }   

        

        for(j = 1; j < range; j++) 

        {

            c[j] += c[j-1]; 

        }

       

        for(j = size - 1; j >= 0; j--) 

        {    

            k = (a[j] / radix) % 10;   

            b[c[k] - 1] = a[j];   

            c[k]--;   

        }   

        

         for(j = 0; j < size; j++)

         {

          a[j] = b[j]; 

         }

    }   

    free(c);   

    free(b);           

}   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值