从不同的基数转换后查找位数的方法

时间:2014-10-26 23:59:27

标签: c++ algorithm base radix-sort radix

引号中的文字给出了我的程序的一些背景知识,以防需要理解我的问题,如果您不想阅读它,您可能能够完全理解最终未加引号的内容。

  

我正在研究用C ++进行排序的常见项目,我就是这样       目前做基数排序。我有它作为一个功能,接受一个       字符串向量,保持最大位数的整数,和       带数字的基数/基数的整数:(数字,maxDigits,基数)

     

由于程序采用不同的数字和字符串,       我正在使用stoi将它们转换为基数为10的整数来制作       过程更容易概括。以下是该算法的快速摘要:

     
      
  • 创建10个队列以保存值0到9
  •   
  • 遍历每个数字(maxDigit次)
      
        
    • 遍历向量中的每个数字(此处它转换为基数为10)
    •   
    • 根据正在查看的当前数字
    • 将它们放入队列   
    • 将队列中的数字从头到尾拉回向量
    •   
  •   

至于我试图绕过的问题,我想将maxDigit值(用户输入的任何基数)更改为maxDigit值,然后将其转换为基数10.换句话说,比如说用户使用了代码

radixSort(myVector, 8, 2)

对数字向量进行排序,最大位数为8,基数为2.由于我将数字的基数转换为10,我试图找到一个算法来改变maxDigits,如果这样做的话感。

我已经尝试过这么多,试图找出一个通过反复试验的简单方法。如果我能在正确的方向上得到一些提示或帮助,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

如果某些内容在基数2和最大数字8中,则其最大值都是1。 11111111 = 255,即(2 ^ 8 - 1)。

基数10中的最大数字将是表示该最大值所需的任何数字。在这里我们看到它是3.哪个是255的基数10对数(2.406540​​18043),四舍五入为3.

所以基本上只是将log10 (radix^maxdigits - 1)向上舍入到最接近的整数。