使用按位移位进行基数排序">>"和按位和"&"运营商使用基数为8和4

时间:2015-11-10 23:17:17

标签: sorting bit-manipulation radix

如何使用基数内容{782,40,21}对数组进行排序,使用基数排序方法,并使用按位移位">>"和按位和"&"运营商?如何使用base 8和4完成?

1 个答案:

答案 0 :(得分:0)

32位整数的基本256基数排序示例。 std :: swap()可以被任何交换方法替换。

typedef unsigned int uint32_t;

//  a is input array, b is working array
uint32_t * RadixSort(uint32_t * a, uint32_t *b, size_t count)
{
size_t mIndex[4][256] = {0};            // count / index matrix
size_t i,j,m,n;
uint32_t u;
    for(i = 0; i < count; i++){         // generate histograms
        u = a[i];
        for(j = 0; j < 4; j++){
            mIndex[j][(size_t)(u & 0xff)]++;
            u >>= 8;
        }       
    }
    for(j = 0; j < 4; j++){             // convert to indices
        m = 0;
        for(i = 0; i < 256; i++){
            n = mIndex[j][i];
            mIndex[j][i] = m;
            m += n;
        }       
    }
    for(j = 0; j < 4; j++){             // radix sort
        for(i = 0; i < count; i++){     //  sort by current lsb
            u = a[i];
            m = (size_t)(u>>(j<<3))&0xff;
            b[mIndex[j][m]++] = u;
        }
        std::swap(a, b);                //  swap ptrs
    }
    return(a);
}