接上篇:基数排序
include <stdio.h>
include <stdlib.h>
void RadixCountSort(int b[],int a[],int n)
//这个是计数算法,只是count[]范围在0到1
{
int i;
int count[10]={0};
for(i=0;i<10;i++)
{
count[i]=0;
}
for(i=0;i<n;i++)
{
count[b[i]] ++;
}
for(i=1;i<10;i++)
{
count[i]=count[i] + count[i - 1];
}
int sort[n]={0};
for(i=n-1;i>=0;i--)
{
count[b[i]] --;
sort[count[b[i]]] = a[i];
}
for(i=0;i<n;i++)
{
a[i]=sort[i];
}
//每次排完都是返回给a数组,且这个数组是先出先入
}
void Radix_sort(int a[],int n)
{
int i , x=1;
int tmp=1; //表示倍数
int b[n]={0};
while(x) //判断一直到最高位数
{
tmp=tmp * 10;
x=0;
for(i=0;i<n;i++)
{
b[i]=a[i] % tmp;
b[i]=b[i] / (tmp / 10); //这两句提取指定的位数,一种新算法,b数组计位数
if(a[i] / tmp > 0)
{
x = 1;
}
}
RadixCountSort(b,a,n); //将b数组排序
}
}
int main()
{
int len=0,num;
int a[100]={0};
while(1)
{
scanf("%d",&num);
a[len++]=num;
if(getchar()=='\n') break;
}
Radix_sort(a,len);
for(int i=0;i<len;i++) printf("%d ",a[i]);
return 0;
}

浙公网安备 33010602011771号