#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void RadixCountSort(int *index,int *a,int len)
{
int i;
int *count=(int *)malloc(sizeof(int)*10);//桶,编号为0~9
memset(count, 0, 40);//清空内存,初始化为零
for(i=0;i<len;i++)
{
count[index[i]] ++;
}
for(i=1;i<10;i++)
{
count[i]=count[i] + count[i - 1];
}
int *sort=(int *)malloc(sizeof(int)*len);
for(i=len-1;i>=0;i--)//先排序
{
count[index[i]] --;
sort[count[index[i]]] = a[i];
}
for(i=0;i<len;i++)//再整体赋值
{
a[i]=sort[i];
}
free(sort);
free(count);
}
void RadixSort(int *a,int len)
{
int i , x=1;
int tmp=1;
int *radix=(int *)malloc(sizeof(int)*len);
while(x)
{
tmp=tmp * 10;
x=0;
for(i=0;i<len;i++)
{
radix[i]=a[i] % tmp;//当x为真时,对10取余、对100取余、对1000取余......
radix[i]=radix[i] / (tmp / 10);//得到个位,十位,百位......
if(a[i] / tmp > 0)//寻找所有数中最大数的位数,还有最大位数,就可以再循环一次
{
x = 1;
}
}
RadixCountSort(radix,a,len);
}
free(radix);
}
int main()
{
int i,len;
int a[]={100, 8 , 1099, 6, 1, 300, 405, 604, 102, 806, 706, 30, 3};
len =sizeof(a) / sizeof(int);
RadixSort(a,len);
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
基数排序
最新推荐文章于 2020-07-01 19:03:33 发布