Sorting 使用“按位移位”的基数排序&燃气轮机&燃气轮机&引用;和按位和&&引用;使用基数8和4的运算符
如何用int内容{782,40,21}对数组进行排序,使用基数排序方法,并使用按位移位“>>”和按位and“&”运算符?如何使用基数8和4实现这一点?示例32位整数的基数256排序。std::swap()可以被任何swap方法替换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)
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;i m=(size_t)(u>>(ju)要对3个值进行基数排序吗?