最低位优先原则:
三个重要函数:求得最大值,最大值有几位数k,从k位,k/10...各位三次桶排序
程序:
#include <iostream>
#include <math.h>
using namespace std;
int Find_Max(int a[],int n)
{
int i;
int max=a[0];
for(i=1;i<n;i++)
{
if(max<a[i])
max=a[i];
}
return max;
}
int digit_number(int number,int n)
{
int num=0;
do
{
number/=10;
num++;
}while(number!=0);
return num;
}
int kth_num(int number,int kth)
{
number /=pow(10,kth);
return number%10;
}
void sort(int a[],int n)
{
int *temp[10];
int count[10]={0,0,0,0,0,0,0,0,0,0};
int max=Find_Max(a,n);
int num=digit_number(max,n);
int i,j,k;
for(i=0;i<10;i++)
{
temp[i]=new int[n];
memset(temp[i],0,sizeof(int)*n);
}
for(i=0;i<num;i++)
{
memset(count,0,sizeof(int)*10);
for(j=0;j<n;j++)
{
int x=kth_num(a[j],i);
temp[x][count[x]]=a[j];
count[x]++;
}
int index=0;
for(j=0;j<10;j++)
{
for(k=0;k<count[j];k++)
a[index++]=temp[j][k];
}
}
}
int main()
{
int a[]={22,32,19,53,169,47};
sort(a,6);
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}