引号中的文字给出了我的程序的一些背景知识,以防需要理解我的问题,如果您不想阅读它,您可能能够完全理解最终未加引号的内容。
我正在研究用C ++进行排序的常见项目,我就是这样 目前做基数排序。我有它作为一个功能,接受一个 字符串向量,保持最大位数的整数,和 带数字的基数/基数的整数:(数字,maxDigits,基数)
由于程序采用不同的数字和字符串, 我正在使用stoi将它们转换为基数为10的整数来制作 过程更容易概括。以下是该算法的快速摘要:
- 创建10个队列以保存值0到9
- 遍历每个数字(maxDigit次)
- 遍历向量中的每个数字(此处它转换为基数为10)
- 根据正在查看的当前数字
将它们放入队列- 将队列中的数字从头到尾拉回向量
至于我试图绕过的问题,我想将maxDigit值(用户输入的任何基数)更改为maxDigit值,然后将其转换为基数10.换句话说,比如说用户使用了代码
radixSort(myVector, 8, 2)
对数字向量进行排序,最大位数为8,基数为2.由于我将数字的基数转换为10,我试图找到一个算法来改变maxDigits,如果这样做的话感。
我已经尝试过这么多,试图找出一个通过反复试验的简单方法。如果我能在正确的方向上得到一些提示或帮助,那将是一个很大的帮助。
答案 0 :(得分:1)
如果某些内容在基数2和最大数字8中,则其最大值都是1。 11111111
= 255,即(2 ^ 8 - 1)。
基数10中的最大数字将是表示该最大值所需的任何数字。在这里我们看到它是3.哪个是255的基数10对数(2.40654018043),四舍五入为3.
所以基本上只是将log10 (radix^maxdigits - 1)
向上舍入到最接近的整数。