首页 > 编程语言 > 详细

基数排序

时间:2017-09-13 11:37:02      阅读:241      评论:0      收藏:0      [点我收藏+]

直接做洛谷上面的快拍模板。。用了个log的小优化,时间瞬间优化三分之一。。

 1 #include <cstdio>
 2 using namespace std;
 3 //#define debug
 4 
 5 #ifdef debug
 6 const int maxn=20;
 7 #else
 8 const int maxn=1e5+5;
 9 #endif
10 
11 double log210;
12 int n, maxlen;
13 int a[maxn];
14 int bucket[10][maxn];
15 
16 double log2(float x){
17     return ((((unsigned int&)x>>23)&255)-127);
18 }
19 
20 int len(int x){
21     return log2(x)/log210+1;
22 }
23 
24 int main(){
25     log210=log2(10);
26     scanf("%d", &n);
27     int l;
28     for (int i=0; i<n; ++i) {
29         scanf("%d", &a[i]);
30         l=len(a[i]);
31         if (l>maxlen) maxlen=l;
32     }
33     int num, len, alen=0;
34     for (int i=0, m=1; i<maxlen; ++i, m*=10){
35         for (int j=0; j<10; ++j) bucket[j][0]=0;
36         for (int j=0; j<n; ++j){
37             num=a[j]/m%10;
38             len=++bucket[num][0];
39             bucket[num][len]=a[j];
40         }
41         alen=0;
42         for (int j=0; j<10; ++j)
43             for (int k=1; k<=bucket[j][0]; ++k)
44                 a[alen++]=bucket[j][k];
45     }
46     for (int i=0; i<n; ++i)
47         printf("%d ", a[i]);
48     return 0;
49 }

 

基数排序

原文:http://www.cnblogs.com/MyNameIsPc/p/7514010.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!