zoukankan      html  css  js  c++  java
  • Radix_Sort C++

    基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼打孔卡片制表机(Tabulation Machine)上的贡献[1]

    它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列

    Wiki

    process

     

    对于取位数上的值:

    • 创建vector<vector<int>> 处理A 变为 A[值][位数值] :例如:A[6] = 789, A[6][1] = 8        : 需要内存多 而且效率低 但是模块化 
    • 将 vector<int> 变为str 在用str的下标得到位数值 转变int :stoi(to_string(A[i])[ws]) : 会超出索引。 例如最大值为3位 而其中一个位1位数,当A[i][1] 为‘’空字符 需要另外处理
    • / %这个方法: 看起来不c++ 但确实好用
      (A[i] / ws) % 10

      CODE C++

    
    
     1 #pragma once
     2 #include<vector>
     3 #include<algorithm>
     4 #include<string>
     5 //内置变量pass-by-value more than pass-by-reference ? 
     6 //P12 --Effective C++(Chinese)
     7 
     8 
     9 //k:A数组中最大值,ws: 对A的的第几位排序 A[ws]
    10 void Count_sort_wz(std::vector<int>& A,int ws)
    11 {
    12     ws = pow(10, ws);
    13     std::vector<int> c(10);
    14     for (int j = 0;j != A.size();++j)
    15     {
    16         //++c[(A[i] / ws) % 10]
    17         //cant stoi(char)
    18         //++c[(std::to_string(A[j])[ws])-'0'];
    19         ++c[(A[j] / ws) % 10];
    20     }
    21     for (int i = 1;i != 10;++i)
    22         c[i] += c[i - 1];
    23     std::vector<int> b(A.size());
    24     for (int i = A.size() - 1;i >= 0;--i)
    25         b[--c[(A[i] / ws) % 10]] = A[i];
    26     for (int i = 0; i != A.size();++i)
    27         A[i] = b[i];
    28 }
    29 
    30 //d位数,A数字
    31 void Radix_Sort(std::vector<int>& A)
    32 {
    33     int max = *std::max_element(A.cbegin(), A.cend());
    34     int d = 0;
    35     for(int i = max; i !=0;d++ )
    36     {
    37         i /= 10;
    38     }
    39     for (int ws = 0;ws != d; ++ws)
    40     {
    41         //max 这时为0
    42         Count_sort_wz(A, ws);
    43     }
    44 }
    
    
    
     

     

  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/Z-s-c11/p/13861107.html
Copyright © 2011-2022 走看看