1

引号中的文字为我的程序提供了一些背景知识,以防需要理解我的问题,如果您不想阅读它,您可能能够完全理解末尾未引用的内容。

我正在研究 C++ 中排序的常见项目,我目前正在做基数排序。我把它作为一个函数,接受一个字符串向量、一个包含最大位数的整数和一个带有数字基数/基数的整数:(numbers, maxDigits, radix)

由于该程序接受不同基数的数字并作为字符串,因此我使用 stoi 将它们转换为以 10 为基数的整数,以使该过程更易于概括。以下是该算法的快速摘要:

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

至于我试图解决的问题,我想在将 maxDigit 值(用户输入的任何基数)转换为基数 10 后将其更改为 maxDigit 值。换句话说,假设用户使用了代码

radixSort(myVector, 8, 2)

对最大位数为 8 且基数为 2 的数字向量进行排序。由于我将数字的基数转换为 10,因此我正在尝试找到一种算法来更改 maxDigits,如果这有意义的话。

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

4

1 回答 1

1

如果某物在基数 2 和最大数字 8 中,那么它的最大值是全 1。和11111111= 255,即 (2^8 - 1)。

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

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

于 2014-10-27T00:09:29.373 回答