算法名称:基数排序[MSD最高位优先]
作者:Robert
基本思路:利用每个元素的本身自带的信息,优先比较位数靠后的大小,直到比较整个位数。
实现步骤:设置比较的几个梯度[通常是10进制],先按最低的[个位]进行排序后顺序链接,然后把处理过后的按第二位比较[十位]进行排序,以此类推即可将所有数字排序。
模板:
1 inline int maxbit(int a[]){ 2 int p=10,d=1; 3 for(int i=0;i<n;i++) 4 while(a[i]<=p) p*=10,d++; 5 return d; 6 } 7 8 int d=maxbit(a); 9 for(int k=1,p=1;k<=d;k++,p*=10){ 10 for(int i=0;i<10;i++) c[i]=0; 11 for(int i=0;i<n;i++) c[(a[i]/p)%10]++; 12 for(int i=1;i<=10;i++) c[i]+=c[i-1]; 13 for(int i=n-1;i>=0;i--) t[--c[(a[i]/p)%10]]=a[i]; 14 for(int i=0;i<n;i++) a[i]=t[i]; 15 }