接上篇:基数排序

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;  

}

posted @ 2020-11-30 00:14  empty_thought  阅读(85)  评论(0)    收藏  举报