算法名称:基数排序[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 }
View Code

相关文章:

  • 2021-07-05
  • 2021-06-08
  • 2022-01-08
  • 2022-12-23
  • 2021-09-17
猜你喜欢
  • 2021-04-12
  • 2021-06-14
  • 2021-10-20
  • 2022-12-23
  • 2021-11-02
  • 2021-04-24
相关资源
相似解决方案