【问题标题】:Radix Sort, the value of r基数排序,r的值
【发布时间】:2010-12-20 14:28:07
【问题描述】:

基数排序请参考以下代码:

class RadixSort
{
    public static void radix_sort_uint(int[] a, int bits)
    {

        int[] b = new int[a.length];
        int[] b_orig = b;


        int rshift = 0;
        for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits) {

            int[] cntarray = new int[1 << bits];

            for (int p = 0; p < a.length; ++p) {
                int key = (a[p] & mask) >> rshift;
                ++cntarray[key];
            }


        for (int i = 1; i < cntarray.length; ++i)
                        cntarray[i] += cntarray[i-1];


            for (int p = a.length-1; p >= 0; --p) {
                int key = (a[p] & mask) >> rshift;
                --cntarray[key];
                b[cntarray[key]] = a[p];
            }


            int[] temp = b; b = a; a = temp;
        }


        if (a == b_orig)
            System.arraycopy(a, 0, b, 0, a.length);
    }
}

这是从维基百科下载的。

我觉得该算法仅适用于完美除以 32 的 bits 参数的值。因此,bits 应该是 2 或 4 之类的东西,而不是 10。如果我是对的,请告诉我。

【问题讨论】:

    标签: java data-structures bit-manipulation radix-sort


    【解决方案1】:

    简短回答:否

    长答案:

    可能的混淆线是:

    for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits) {
    

    mask &lt;&lt;= bitsmask 的位左移bits,用零填充右边。如果bits 不除以 32,则不会使用完整的 32 位。因此,虽然bits 应该除以 32,但选择一个不会破坏代码的值。

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多