码迷,mamicode.com
首页 > 编程语言 > 详细

基数排序

时间:2017-09-13 11:56:33      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:log   模板   sig   scanf   ons   main   bsp   debug   return   

直接做洛谷上面的快拍模板。。用了个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 }

 

基数排序

标签:log   模板   sig   scanf   ons   main   bsp   debug   return   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!