Sorting 使用“按位移位”的基数排序&燃气轮机&燃气轮机&引用;和按位和&&引用;使用基数8和4的运算符

Sorting 使用“按位移位”的基数排序&燃气轮机&燃气轮机&引用;和按位和&&引用;使用基数8和4的运算符,sorting,bit-manipulation,radix,Sorting,Bit Manipulation,Radix,如何用int内容{782,40,21}对数组进行排序,使用基数排序方法,并使用按位移位“>>”和按位and“&”运算符?如何使用基数8和4实现这一点?示例32位整数的基数256排序。std::swap()可以被任何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)

如何用int内容{782,40,21}对数组进行排序,使用基数排序方法,并使用按位移位“>>”和按位and“&”运算符?如何使用基数8和4实现这一点?

示例32位整数的基数256排序。std::swap()可以被任何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);
}
typedef无符号整数uint32\t;
//a是输入数组,b是工作数组
uint32_t*半径排序(uint32_t*a、uint32_t*b、大小计数)
{
size_t mIndex[4][256]={0};//计数/索引矩阵
尺寸i,j,m,n;
uint32_t u;
对于(i=0;i>=8;
}       
}
对于(j=0;j<4;j++){//转换为索引
m=0;
对于(i=0;i<256;i++){
n=mIndex[j][i];
mIndex[j][i]=m;
m+=n;
}       
}
对于(j=0;j<4;j++){//基数排序
对于(i=0;im=(size_t)(u>>(ju)要对3个值进行基数排序吗?